设计模式(3)――结构性模式 (七)

2014-11-24 02:43:10 · 作者: · 浏览: 5
;
public ConcreateCompany(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();
}
}
}

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 );
}
}
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 );
}
}
}
namespace 组合模式
{
class Class1
{
static void Main(string[] args)
{
ConcreateCompany root = new ConcreateCompany("北京总公司");
root.Add(new HRDepartment("总公司人力资源部"));
root.Add(new FinanceDepartment("总公司财务部"));

ConcreateCompany comp = new ConcreateCompany("上海华东分公司");
comp.Add(new HRDepartment("华东分公司人力资源部"));
comp.Add(new FinanceDepartment("华东分公司财务部"));
root.Add(comp );

ConcreateCompany comp1 = new ConcreateCompany("南京办事处");
comp1.Add(new HRDepartment("南京办事处人力资源部"));
comp1.Add(new FinanceDepartment("南京办事处财务部"));
comp.Add(comp1);

ConcreateCompany comp2 = new ConcreateCompany("杭州办事处");
comp2.Add(new HRDepartment("杭州办事处人力资源部"));
comp2.Add(new FinanceDepartment("杭州办事处财务部"));
comp.Add(comp2);

Console.WriteLine("\n结构图:");
root.Display(1);

Console.WriteLine("\n职责");
root.LineOfDuty();

Console.Read();
}
}
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(); //履行职责
}

class ConcreateCompany : Company //具体公司类树枝节点
{
private List child