✨模式类型✨✨ | ✨✨难度✨ ✨ | ✨✨实用性✨✨ | ✨✨重要程度✨✨ | ✨✨经典性✨✨ | ✨✨历史性✨ |
---|---|---|---|---|---|
结构型模式 | ★★★ ⬇️ | ★★★★ ⬆️ | ★★★★★ ⬆️ | 💚 ⬆️ | 💚 ⬆️ |
组合模式(Composite Pattern
),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
使得客户端看来单个对象和对象的组合是同等的。换句话说,某个类型的方法同时也接受自身类型作为参数。将对象组合成树形结构以表示部分-整体的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。它在我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理复杂元素,从而使得客户程序与复杂元素的内部结构解耦。
组合模式对象可以进行反复或重复组合拼接,最终组合出无数个不同的对象体。组合对象可以进行自引用,即一个相同的对象类型进行自关联。
Component
组件对象:里面可以包括其他各种不同的组件,但这些组件都是继承当前组件类的组件。
-
优点
- 高层模块调用简单。
- 节点自由增加。
- 模块结构简单明确。
- 对象进行大量组合,提供代码可复用行,减少冗余的代码。
-
缺点
- 在使用组合模式时,其叶子和树枝的声明都是实现类,而不是接口,违反了依赖倒置原则。
组合模式的实现要点如下:
- 定义组合对象
TreeNode
,在对象本身中添加该对象的引用,让对象可以进行自引用 - 定义
Tree
包装对象TreeNode
对象,相当于在树形的根元素中存在无数个子节点
组合模式适用于:
- 想要表示对象的部分整体层次结构
- 希望客户能够忽略对象和单个对象的组合之间的差异。客户端将统一处理复合结构中的所有对象
javax.swing.JComponent#add(Component)
java.awt.Container#add(Component)
java.util.Map#putAll(Map)
java.util.List#addAll(Collection)
java.util.Set#addAll(Collection)
- 组合模式是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。
- 使得客户端看来单个对象和对象的组合是同等的。换句话说,某个类型的方法同时也接受自身类型作为参数。组合模式使得用户对单个对象和组合对象的使用具有一致性。
- 组合模式对象可以进行反复或重复组合拼接,最终组合出无数个不同的对象体。组合对象可以进行自引用,即一个相同的对象类型进行自关联。
- 高层模块调用简单,节点自由增加,模块结构简单明确。
- 组合模式适用于:想要表示对象的部分整体层次结构;希望客户能够忽略对象和单个对象的组合之间的差异,客户端将统一处理复合结构中的所有对象。