一、组合模式
将对象聚合成树形结构来表现“整体/部分”的层次结构
二、示例
本次示例延用上一个文章《迭代器模式》的菜单整合项目:
本次的需求是将在中餐厅的菜单中添加一块甜点菜单组,遍历输出菜单时也要遍历新增的甜点菜单
则满足本次需求需要用到组合模式,将项目对象设计成类似数据结构中树的对象,菜单项相当于是叶子节点,叶子节点下仍可拓展新的子类叶子节点
- 需要用树形结构,节点是菜单或子菜单,叶子是菜单项
- 需要能够在各个菜单项之间游走,遍历
- 要能够有弹性的在菜单项之间游走
1.定义一个统一属性的父类节点对象
1 |
|
2.定义统一的子类菜单对象
1 |
|
3.组合对象引申出来的组合迭代器,利用栈存放子类的迭代器
1 |
|
4.定义新增的甜点菜单,也继承统一的父类菜单对象
1 |
|
5.在中餐厅菜单中添加上新增的子菜单即可
1 |
|
6.由于所有菜单都继承自统一的父类菜单对象,迭代器也使用组合迭代器,则菜单项可一直深层次的添加子类单
1 |
|
三、总结
- 组合模式能让客户以一致的方式来处理个别对象以及对象组合。 也就是我们可以忽略对象组合与个体对象之间的差别
- 将对象组合成树形结构以表示“部分-整体”的层次结构。
- 组合模式使得用户对单个对象和组合对象的使用具有唯一性
Java设计模式所有示例代码,持续更新中