首页 > 编程 > C# > 正文

C#组合模式实例详解

2020-01-24 01:37:09
字体:
来源:转载
供稿:网友

本文实例讲述了C#组合模式。分享给大家供大家参考。具体如下:

Company.cs如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{  public abstract class Company  {    protected string name;    public Company(string name)     {      this.name = name;    }    public abstract void Add(Company c);    public abstract void Remove(Company c);    public abstract void Display(int depth);    public abstract void LineOfDuty();  }}

ConcreteCompany.cs如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{  public class ConcreteCompany:Company  {    private List<Company> children = new List<Company>();    public ConcreteCompany(string name)       :base(name)    {}    public override void Add(Company c)    {      children.Add(c);    }    public override void Remove(Company c)    {      children.Remove(c);    }    public override void Display(int depth)    {      Console.WriteLine(new String('-',depth)+name);      foreach(Company component in children)      {        component.Display(depth+2);      }    }    public override void LineOfDuty()    {      foreach(Company component in children)      {        component.LineOfDuty();      }    }  }}

FinanceDepartment.cs如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{  public class FinanceDepartment:Company  {    public FinanceDepartment(string name) : base(name) { }    public override void Add(Company c)    {    }    public override void Remove(Company c)    {          }    public override void Display(int depth)    {      Console.WriteLine(new String('-',depth)+name);    }    public override void LineOfDuty()    {      Console.WriteLine("{0} 财务支付管理",name);    }  }}

HRdepartment.cs如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{  public class HRdepartment:Company  {    public HRdepartment(string name)      :base(name)    { }    public override void Add(Company c)    {    }    public override void Remove(Company c)    {    }    public override void Display(int depth)    {      Console.WriteLine(new String('-',depth)+name);    }    public override void LineOfDuty()    {      Console.WriteLine("{0} 招聘培训管理",name);    }  }}

Program.cs如下:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{  class Program  {    static void Main(string[] args)    {      ConcreteCompany root = new ConcreteCompany("北京总共司");      root.Add(new HRdepartment("人力部"));      root.Add(new FinanceDepartment("财务部"));      ConcreteCompany comp = new ConcreteCompany("上海分公司");      comp.Add(new HRdepartment("分工司人力部"));      comp.Add(new FinanceDepartment("分公司财务部"));      root.Add(comp);      ConcreteCompany comp1 = new ConcreteCompany("南京分部");      comp1.Add(new HRdepartment("南京人力部"));      comp1.Add(new FinanceDepartment("南京财务部"));      comp.Add(comp1);      ConcreteCompany comp2 = new ConcreteCompany("杭洲分部");      comp2.Add(new HRdepartment("杭州人事部"));      comp2.Add(new FinanceDepartment("杭州财务部"));      comp.Add(comp2);      root.Display(1);      Console.ReadKey();    }  }}

希望本文所述对大家的C#程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表