讲故事学设计模式-合成(Composite)模式
2014-03-09 22:47
519 查看
合成模式相对简单,但是它却被广泛设计者使用,例如SWT,Eclipse等等。它主要是构建一棵树,并且可以通过一个统一的方法访问这棵树。
我们将实现如下树结构,请看源代码。
上面所提到的是Composite的安全模式,它还有一种透明模式。透明模式与安全模式的却别在于将add()和remove()上提至IComposite处,这样所有叶子节点与合成类拥有同样的接口,操作单一。但明显add()和remove()不应该出现在叶子上,虽然能通过编译,但运行期极易出错,请大家根据实际情况取舍。
原文链接:http://www.programcreek.com/2013/02/java-design-pattern-composite/
1、类图
我们将实现如下树结构,请看源代码。
2、代码
import java.util.List; import java.util.ArrayList; //Component interface Component { public void show(); } //Composite class Composite implements Component { private List<Component> childComponents = new ArrayList<Component>(); public void add(Component component) { childComponents.add(component); } public void remove(Component component) { childComponents.remove(component); } @Override public void show() { for (Component component : childComponents) { component.show(); } } } //leaf class Leaf implements Component { String name; public Leaf(String s){ name = s; } public void show() { System.out.println(name); } } public class CompositeTest { public static void main(String[] args) { Leaf leaf1 = new Leaf("1"); Leaf leaf2 = new Leaf("2"); Leaf leaf3 = new Leaf("3"); Leaf leaf4 = new Leaf("4"); Leaf leaf5 = new Leaf("5"); Composite composite1 = new Composite(); composite1.add(leaf1); composite1.add(leaf2); Composite composite2 = new Composite(); composite2.add(leaf3); composite2.add(leaf4); composite2.add(leaf5); composite1.add(composite2); composite1.show(); } }
3、附加
其实我们有一个很符合Composite模式的故事。小时候奶奶跟我讲:从前有座山,山里有座庙,庙里有个老和尚(应该是道士)和小和尚。有一天老和尚对小和尚说,“从前有座山,山里有座庙……”。显然老外是没听说过了。上面所提到的是Composite的安全模式,它还有一种透明模式。透明模式与安全模式的却别在于将add()和remove()上提至IComposite处,这样所有叶子节点与合成类拥有同样的接口,操作单一。但明显add()和remove()不应该出现在叶子上,虽然能通过编译,但运行期极易出错,请大家根据实际情况取舍。
原文链接:http://www.programcreek.com/2013/02/java-design-pattern-composite/
相关文章推荐
- 【设计模式】之 Composite 合成模式
- 设计模式——合成模式(Composite)
- 《Java与模式》学习笔记:设计模式——合成(Composite)模式
- 学习php设计模式 php实现合成模式(composite)
- 设计模式学习笔记--合成(Composite)模式
- 恋爱中的设计模式 之 Composite模式 (合成模式)
- Java设计模式——合成模式(Composite)
- C# 设计模式--合成模式(Composite)
- 设计模式c#语言描述——合成(Composite)模式
- 《Java与模式》学习笔记:设计模式——合成(Composite)模式
- 设计模式循序渐进(3)合成模式 Composite
- 设计模式_Composite_合成模式
- 设计模式c#语言描述&#8212;&#8212;合成(Composite)模式
- 学习php设计模式 php实现合成模式(composite)
- 设计模式c#语言描述——建造者模式、适配器模式、合成(Composite)模式
- Java设计模式十六:组合模式(Composite Pattern)
- java 设计模式之: 组合模式(Composite)---1 【转】
- 设计模式 - Composite模式(组合模式)
- 设计模式(二)组合模式Composite(C++沉思录:表达式求值)
- C# 设计模式-组合(Composite)