组合模式
组合模式是组合多个对象形成的树形结构以表示具有整体-部分关系的层次结构,对单个对象(叶子对象)与组合对象(容器对象)的使用具有一致性,因此组合模式又称为部分-整体模式,它是一种对象结构型模式。
适用场景
- 在具有整体与部分的层次结构中,希望通过一种方式忽略整体-部分的差异,客户端可以一致的对待。
- 在一个使用面向对象的语言开发系统中需要处理一个树形结构。
- 在一个系统中能分理叶子对象 与容器对象,而且他们类型不固定,需要增加一些新的类型。
组合模式结构图
- componet(抽象组件):为叶子构件与容器构件对象声明提供了接口,该角色中可以包含所有子类的共有行为与声明和实现。
- Leaf(叶子组件):在组合模式结构中表示为叶子结点对象,叶子组件没有子节点,它实现了父类的定义行为。
- Composite(容器组件):在组合模式中表示为容器对象,它包含了子节点,或者容器节点,其子节点中可以包含叶子节点或者容器节点。它提供了一个集合用于存储子节点,实现了在抽象组件中的定义的方法,包括那些访问以及管理子构件的方法,在其业务方法中可以递归调用子节点的业务方法。
代码实现
可以参考我的资源去下载。
优缺点
优点:
- 能清楚地定义一个复杂系统的层次结构,方便对层次结构进行管理。
- 可以增加新的容器对象与叶子对象,符合开闭原则。
- 为树形结构对象提供了灵活的解决方案,通过叶子对象与容器对象递归组合可以形成复杂的树形结构,但对树形结构的控制却非常简单。
缺点:
在增加新的类型时很难对容器中的构件类型进行限制,他们拥有相同的抽象层,所以对某个容器类型去限制只具有某个指定的叶子对象或者容器对象是很复杂的。