逻辑非常清晰,代码非常好写的一种设计模式
定义:讲对象组合成树形结构以表示“部分-整体”的层次结构。组合你是是的用户对单个对象和组合对象的使用具有一致性
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 组合模式 { class Program { abstract class Component { protected string name; public Component(string name) { this.name = name; } public abstract void Add(Component c); public abstract void Remove(Component c); public abstract void Display(int depth); } class Leaf:Component { public Leaf(string name) : base(name) { } public override void Add(Component c) { Console.WriteLine("cannot add a leaf"); } public override void Remove(Component c) { Console.WriteLine("cannot remove from leaf"); } public override void Display(int depth) { Console.WriteLine(new String('-', depth) + name); } } class Composite:Component { private List<Component> children = new List<Component>(); public Composite(string name) : base(name) { } public override void Add(Component c) { children.Add(c); } public override void Remove(Component c) { children.Remove(c); } public override void Display(int depth) { Console.WriteLine(new String('-', depth) + name); foreach (Component component in children) component.Display(depth + 2); } } static void Main(string[] args) { Composite root = new Composite("root"); root.Add(new Leaf("Leaf A")); root.Add(new Leaf("Leaf B")); Composite comp = new Composite("Composite X"); comp.Add(new Leaf("Leaf XA")); comp.Add(new Leaf("Leaf XB")); root.Add(comp); Composite comp2 = new Composite("Composite X"); comp2.Add(new Leaf("Leaf XA")); comp2.Add(new Leaf("Leaf XB")); comp.Add(comp2); root.Add(new Leaf("Leaf C")); Leaf leaf = new Leaf("Leaf D"); root.Add(leaf); root.Remove(leaf); root.Display(1); Console.Read(); } } }-root
---Leaf A
---Leaf B
---Composite X
-----Leaf XA
-----Leaf XB
-----Composite X
-------Leaf XA
-------Leaf XB
---Leaf C