Java设计模式(十六):组合模式

组合模式(composite pattern)

组合模式(composite pattern):属于对象的结构型模式。将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。


组合模式UML图

Java设计模式(十六):组合模式

Java


组合模式涉及的角色

抽象构件(Component)角色:组合中的对象声明接口,在适当情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理 Component 的子不部件树叶构件(Leaf)角色:在组合中表示叶节点对象,叶节点没有子节点树枝构件(Composite)角色:定义有枝节点行为,用来存储子部件,在 Component 接口中实现与子部件有关的操作,比如 增加 add 和删除 remove


组合模式的实现方式

  • 透明方式

要求在 Component 中申明所有的管理方法,如: add 和 remove 方法,所有实现 Component 类的子类都实现了这些管理方法。这样做的好处是无论是树叶节点还是树枝节点对于外界是没有区别的,它们具备完全一致的行为接口。但问题也很明显,因为 树叶节点(Leaf)本身并不具备管理方法的功能,所以实现它是没有意义的。

  • 安全方式

也就是在 Component 类中不去声明 add 和 remove 方法,那么子类的 Leaf 也就不需要去是实现它,而是在 Composite 类声明所有用来管理子类的对象的方法,这样做就不会出现透明方式的问题,不过由于不透明,所以树叶和树枝类将不具有相同的接口,客户端调用需要作出相应的判断,带来了不变。

在组成模式中,建议多采用透明方式


示例代码

抽象构建类 Component

Java设计模式(十六):组合模式

Java

树叶构件类 Leaf

Java设计模式(十六):组合模式

Java

树枝构件类 Composite

Java设计模式(十六):组合模式

Java

客户端测试类 TestCompositePattern

Java设计模式(十六):组合模式

Java学习资料获取(复制下段连接至浏览器即可)

data:text/html;charset=UTF-8;base64,5p625p6E5biI5a2m5Lmg6LWE5paZ5YWN6LS56aKG5Y+W6K+35Yqg5omj5omj5Y+35pivMTAxODkyNTc4MA==


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章