概述
- 组合模式是关于怎样将对象形成树形结构来表现整体和部分的层次结构的成熟模式。
- 使用组合模式,可以让用户以一致的方式处理个体对象和组合对象,组合模式的关键在于无论是个体对象还是组合对象都实现了相同的接口或都是同一个抽象类的子类。
组合模式的结构
组合模式包括三种角色。
- 抽象组件(Component)
- Composite节点(Component Node)
- Leaf节点(Leaf Node)
抽象组件(Component)
- 是一个接口(抽象类)。
- 该接口(抽象类)定义了个体对象和组合对象需要实现的关于操作其子节点的方法,比如add()、remove()、以及getChild()等方法。抽象组件也可以定义个体对象和组合对象用于操作其自身的方法,比如isLeaf()方法等。
Composite节点(Component Node)
- 实现Component接口类的实例,Composite节点不仅实现Component接口,而且可以含有其他Composite节点或Leaf节点的引用。
Leaf节点(Leaf Node)
- 实现Component接口类的实例,Leaf节点实现Component接口,不可以含有其他Composite节点或Lea节点的引用,因此,叶节点在实现Component接口有关操作子节点的方法时,比如add()、remove()和getChild()方法,可让方法抛出一个异常,也可以实现为空操作。
组合模式的优点
- 组合模式中包含个体对象和组合对象,并形成树形结构,使用户可以方便地处理个体对象和组合对象。
- 组合对象和个体对象实现了相同的接口,用户一般无须区分个体如想和组合对象。
- 当增加新的Composite节点和Leaf节点时,用户的重要代码不需要做出修改。
适合组合模式的情景
- 当想表示对象的部分-整体层次结构。
- 希望用户一致的方式处理个体对象和组合对象。