一、定义
组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
解释:简单来说,编写一个类,该类能作用于整体,并且编写整体中的部分时也能使用该类,而不用做大的更改。
二、UML类图及基本代码
基本代码:
abstract class Component { protected string name; public Component(string name) { this.name = name; } public abstract void Add(Component component); public abstract void Remove(Component component); public abstract void Display(int depth); } class Leaf : Component { public Leaf(string name) : base(name) { } public override void Add(Component component) { Console.WriteLine("cannot add to a leaf"); } public override void Remove(Component component) { Console.WriteLine("cannot remove to a leaf"); } public override void Display(int depth) { Console.WriteLine(new string('-', depth) + name); } } class Composite : Component { private IList<Component> children = new List<Component>(); public Composite(string name) : base(name) { } public override void Add(Component component) { children.Add(component); } public override void Remove(Component component) { children.Remove(component); } public override void Display(int depth) { Console.WriteLine(new string('-', depth) + name); foreach (Component component in children) { component.Display(depth + 2); } } }
客户端进行调用:
Composite root = new Composite("root"); root.Add(new Leaf("leaf A")); root.Add(new Leaf("leaf B")); Composite composite = new Composite("Composite X"); composite.Add(new Leaf("leaf XA")); composite.Add(new Leaf("leaf XB")); root.Add(composite); Composite composite2 = new Composite("Composite XY"); composite2.Add(new Leaf("leaf XYA")); composite2.Add(new Leaf("leaf XYB")); composite.Add(composite2); root.Add(new Leaf("leaf C")); Leaf leaf = new Leaf("Leaf D"); root.Add(leaf); root.Remove(leaf); root.Display(1);