本文共 2420 字,大约阅读时间需要 8 分钟。
在现实生活中,存在很多“部分-整体”的关系,例如,大学中的部门与学院、总公司中的部门与分公司、学习用品中的书与书包、生活用品中的衣月艮与衣柜以及厨房中的锅碗瓢盆等。在软件开发中也是这样,例如,文件系统中的文件与文件夹、窗体程序中的简单控件与容器控件等。对这些简单对象与复合对象的处理,如果用组合模式来实现会很方便。
组合(Composite)模式的定义:有时又叫作部分-整体模式,它是一种将对象组合成树状的层次结构的模式,用来表示“部分-整体”的关系,使用户对单个对象和组合对象具有一致的访问性。
组合模式的主要优点有:组合模式包含以下主要角色。
假如要访问集合 c0={leaf1,{leaf2,leaf3}} 中的元素,其对应的树状图如图 3 所示。
////// 抽象构件 /// interface Component { void add(Component c); void remove(Component c); Component getChild(int i); void operation(); } //树叶构件 class Leaf : Component { private String name; public Leaf(String name) { this.name = name; } public void add(Component c) { } public void remove(Component c) { } public Component getChild(int i) { return null; } public void operation() { Console.WriteLine("树叶" + name + ":被访问!"); } } //树枝构件 class Composite : Component { private Listchildren = new List (); public void add(Component c) { children.Add(c); } public void remove(Component c) { children.Remove(c); } public Component getChild(int i) { return children.ElementAt(i); } public void operation() { foreach (var item in children) { ((Component)item).operation(); } } } public class Program { static void Main(string[] args) { Component c0 = new Composite(); Component c1 = new Composite(); Component leaf1 = new Leaf("1"); Component leaf2 = new Leaf("2"); Component leaf3 = new Leaf("3"); c0.add(leaf1); c0.add(c1); c1.add(leaf2); c1.add(leaf3); c0.operation(); Console.ReadKey(); } }
参考:
转载地址:http://vjiii.baihongyu.com/