本文介绍了GoF中的组合模式。
模式推演
对树形结构进行操作时:
当我们需要对一个树形的对象集合进行操作,例如遍历时:
由于每一个节点都可能有子节点的枝节点,也可能是没有子节点的叶节点,我们希望能在处理这两类时,能用统一的处理方式,把枝节点和叶节点的方法统一封装成接口:
1 | public class Component { |
这里的枝节点和叶节点继承自同一个基类,所以我们在处理时,可以针对抽象进行交互,而无需理会其类型。但是由于枝节点里面包含了多个叶节点,所以,这里我们需要用到迭代器。
一般的迭代器写法如下:
1 | public class Composite extends Component { |
这样写,如果枝节点包含的都是叶节点,是可以的,但是如果枝节点包含了枝节点,我们没办法单独处理该子枝节点中的叶节点,所以需要改进:
1 | class ComponentIterator implements Iterator<Component> { |
定义
组合模式(Composite Pattern):允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。
类图: