1、本章的例子——餐厅和煎饼屋合并
煎饼屋菜单,用ArrayList有两个餐厅要合并了,两个餐厅有不同的菜单,一个菜单用ArrayList写的,一个是直接用类数组写的,现在合并后,菜单需要合并在一起。
餐厅菜单,用数组
-
如果要遍历菜单需要使用不同的方法
遍历两种菜单 -
可以通过迭代器接口统一两种菜单的遍历方式
public interface Iterator {
boolean hasNext();
Object next();
}
-
然后分别为餐厅、煎饼店实现迭代器
餐厅迭代器
为餐厅类添加创建迭代器方法
基于迭代器实现统一的遍历方法
依赖createIterator接口的迭代器统一方法
2、迭代器模式
迭代器模式类图提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内不展示
3、设计原则
单一责任——一个类应该只有一个引起变化的原因
- 当一个模块或一个类被设计成只支持一组相关的功能时,我们说它具有高内聚
- 如果有一个类具有两个改变的原因,那么这会使得将来该类的变化几率上升
4、另一个例子——菜单中包含子菜单
嵌套的菜单菜单项目具有层次,需要一种结构可以兼容
5、组合模式
允许将对象组合成树形结构来表现“整体、部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。
- 让子节点、父节点都实现相同的接口。相同的操作可以用在组合上也可以运用在个别对象上。
网友评论