龙空技术网

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

雾霾少女啊 150

前言:

当前兄弟们对“java组合键”可能比较关切,小伙伴们都想要学习一些“java组合键”的相关内容。那么小编在网上汇集了一些有关“java组合键””的相关资讯,希望兄弟们能喜欢,姐妹们快快来学习一下吧!

组合模式(composite pattern)

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

组合模式UML图

Java

组合模式涉及的角色

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

组合模式的实现方式

透明方式

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

安全方式

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

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

示例代码

抽象构建类 Component

Java

树叶构件类 Leaf

Java

树枝构件类 Composite

Java

客户端测试类 TestCompositePattern

标签: #java组合键