背景描述
一个公司存在子公司,以及职能部门。用组合模式来实现公司的组织。
代码实现
Company类
public abstract class Company
{
protected string mName;
public Company(string name)
{
mName = name;
}
public abstract void Add(Company c);
public abstract void Remove(Company c);
public abstract void Display(int depth);
}
具体Company类
public class ConcreteCompany: Company
{
private List<Company>ChildrenList = new List<Company>();
public ConcreteCompany(string name) : base(name) { }
public override void Add(Company c) {
ChildrenList.Add(c);
}
public override void Remove(Company c) {
ChildrenList.Remove(c);
}
public override void Display(int depth) {
Console.WriteLine(new string('-', depth) + mName);
foreach (var component in ChildrenList)
{
component.Display(depth + 2);
}
}
}
最底层Company类
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) + mName);
}
}
Main方法
internal class Program
{
static void Main(string[] args)
{
ConcreteCompany root = new ConcreteCompany("北京总公司");
root.Add(new FinanceDepartment("总公司财务部"));
ConcreteCompany comp1 = new ConcreteCompany("上海华东分公司");
comp1.Add(new FinanceDepartment("华东分公司财务部"));
root.Add(comp1);
ConcreteCompany comp2 = new ConcreteCompany("南京办事处");
comp2.Add(new FinanceDepartment("南京办事处财务部"));
root.Add(comp2);
root.Display(1);
}
}
执行结果:
-北京总公司
---总公司财务部
---上海华东分公司
-----华东分公司财务部
---南京办事处
-----南京办事处财务部