组合模式(Composite)

组合模式:将对象组合成树形结构以表示’部分-整体‘的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

 

 1 namespace Composite//组合模式 2016.12.18 14:18 by ldb
 2 {
 3 abstract class Component //为组合中的对象声明接口。
 4 {
 5 protected string name;
 6 public Component(string name)
 7 {
 8 this.name = name;
 9 }
10 
11 public abstract void Add(Component c);
12 public abstract void Remove(Component c);
13 public abstract void Display(int depht);
14 }
15 
16 class Leaf : Component //在组合中表示叶节点对象,叶节点没有子节点。
17 {
18 public Leaf(string name)
19 : base(name)
20 {
21 
22 }
23 public override void Add(Component c)
24 {
25 Console.WriteLine("不能 添加枝节点");
26 }
27 
28 public override void Remove(Component c)
29 {
30 Console.WriteLine("不能移除枝节点");
31 }
32 public override void Display(int depht)
33 {
34 Console.WriteLine(new string('-',depht) + name);
35 }
36 }
37 
38 class Composite : Component
39 {
40 private List<Component> children = new List<Component>();
41 public Composite(string name)
42 : base(name)
43 { 
44 
45 }
46 public override void Add(Component c)
47 {
48 children.Add(c);
49 }
50 public override void Remove(Component c)
51 {
52 children.Remove(c);
53 }
54 public override void Display(int depht)
55 {
56 Console.WriteLine(new string('-',depht) + name);
57 
58 foreach(var com in children)
59 {
60 com.Display(depht);
61 }
62 
63 }
64 }
65 class Program
66 {
67 static void Main(string[] args)
68 {
69 Composite root = new Composite("root");//生成树根,根上长出两叶LeafA,LeafB.
70 
71 root.Add(new Leaf("LeafA"));
72 root.Add(new Leaf("LeafB"));
73 
74 Composite comp = new Composite("Composite X");//根上长出分枝Composite X,分枝上也有两叶Leaf XA,Leaf XB
75 
76 comp.Add(new Leaf("Leaf XA"));
77 comp.Add(new Leaf("Leaf XB"));
78 
79 root.Add(comp);
80 
81 Composite comp2 = new Composite("Composite XY");//在分枝Composite X长出分枝Composite XY,分枝上也有两叶Leaf XYA,Leaf XYB
82 
83 comp2.Add(new Leaf("Leaf XYA"));
84 comp2.Add(new Leaf("Leaf XYB"));
85 
86 comp.Add(comp);
87 
88 root.Display(1);
89 
90 Console.Read();
91 }
92 }
93 }

 

posted @ 2017-06-12 20:19  longdb  阅读(107)  评论(0编辑  收藏  举报