设计模式之Composite(组合)模式(二)
:递归
121 /// (**)调用的顺序:当 调用到一个子节点,会将他的下面 子节点全都调用完成之后,才调用他的兄弟节点
122 ///
123 ///
124 public override void Show()
125 {
126 //先显示自己
127 Console.WriteLine("公司名称:"+base.Name);
128
129 //显示下面所有的子节点的 名称
130 foreach (var item in items)
131 {
132 item.Show();
133 }
134
135 //注意:要是使用 父节点的方式 实现树形组合:这个时候递归遍历下面所有的子节点的方式就不能执行了
136 }
137
138 public override void DoDuty()
139 {
140 //先执行自己的职责
141 Console.WriteLine(base.Name+":致力于管理好整个公司");
142
143 //在执行 他的节点下面的所有的节点的 所有的职责
144 foreach (var item in items)
145 {
146 item.DoDuty();
147 }
148
149 }
150 }
复制代码
客户端调用代码:
复制代码
1 //都是通过AbsCompany,后面创建的过程 可以通过 反射进行创建。所以客户 就可以直接 通过树形节点的 最顶层节点 就行创建下面一系列的节点,不用关心具体的实现 (耦合 大大降低)
2 AbsCompany HeadCompany = new Company("阿里巴巴");
3 AbsCompany hr1 = new HRPart("总公司人力资源部");
4 AbsCompany money1 = new MoneyPart("总公司财务部");
5 AbsCompany company1 = new Company("上海分公司");
6 AbsCompany company2 = new Company("北京办事处");
7 AbsCompany hr2 = new HRPart("上海分公司人力资源部");
8 AbsCompany money2 = new MoneyPart("上海分公司财务部");
9 AbsCompany hr3 = new HRPart("北京人力资源部");
10 AbsCompany money3 = new MoneyPart("北京财务部门");
11 AbsCompany company3 = new Company("深圳办事处");
12 AbsCompany hr4 = new HRPart("深圳人力资源部");
13 AbsCompany money4 = new MoneyPart("深圳财务部");
14 HeadCompany.Add(company1);
15 HeadCompany.Add(hr1);
16 HeadCompany.Add(money1);
17 company1.Add(hr2);
18 company1.Add(money2);
19 company1.Add(company2);
20 company1.Add(company3);
21 company2.Add(hr3);
22 company2.Add(money3);
23 company3.Add(hr4);
24 company3.Add(money4);
25 HeadCompany.Show();
26 HeadCompany.DoDuty();
复制代码
每个对象的创建可以通过反射的方式进行创建