设计模式学习笔记--合成(Composite)模式(二)

2014-11-23 23:41:22 · 作者: · 浏览: 1
((Component)it.next()).sampleOp(); } } //容器管理,增加子构件对象 public void add(Component c) { componentList.add(c); } //容器管理,删除子构件对象 public void remove(Component c) { componentList.remove(c); } } class Leaf implements Component { //返还自己的实例 public Composite getComposite() { //Write you code here return null; } //某个商业方法 public void sampleOp() { //Write your code here } //容器管理,增加子构件对象 public void add(Component c) { } //容器管理,删除子构件对象 public void remove(Component c) { } }

更多了解


(1)在JDK中对于合成模式使用最多的地方,当属AWT库,java.awt.Button/java.awt.CheckBox等是树叶构件,java.awt.Container是树枝构件,java.awt.Component是抽象构件。

(2)在下面的情况下应当考虑使用合成模式:a、需要描述对象的部分和整体的等级结构;b、需要客户端忽略掉个体构件和组合构件的区别;客户端必须平等对待所有的构件,包括个体构件和组合构件。

(3)实际生产中,对于分类、权限、部门之类具有树形层级关系的结构,非常适合应用合成模式;比如树形分类,以前可能只建立一个和数据表行完全一致的model类,现在可以根据合成模式的思想发展一下,使其完成更多的职责,更容易使用。这个扩展也不必一定要有树叶构件、抽象构件,可能只有树枝构件,总之,适合具体场景即可。

(4)个人在学习过程中,从找不到合成模式的场景,到理解到可以对以前设计的优化,发展开阔了很多,似乎有点“顿悟”的感觉大笑