迭代器模式:提供一种方法顺序访问一个聚合对象中的各个原色,而又不暴露其内部的表示。
对象村餐厅&煎饼店的迭代器模式实例:
迭代器模式类图:
设计原则:一个类应该只有一个引起变化的原因。
如果我们允许我们的聚合实现他们内部的集合,以及相关的操作和遍历的方法,又会如何?我们已经知道这会增加聚合中的方法个数,但又怎样呢?为什么这么做不好?
我们知道避免类内的改变,因为修改代码很容易造成许多潜在的错误。如果有一个类具有两个改变的原因,那么这会使得将来该类的变化几率上升,而当它真的改变时,你的设计中同时有两个方面将会受到影响。
把对元素的遍历从服务员类中分离出来,单独用迭代器接口封装遍历,就是遵循了这个原则,不让对遍历的修改引起对服务员类的改变。
组合模式:允许你将对象组合成树形结构来表现“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。
总而言之,当你有数个对象的集合,它们彼此之间有“整体/部分”的关系,并且你想用一致的方式对待这些对象时,可以考虑组合模式。
组合模式类图:
示例:使用组合模式重构对象村餐厅菜单
修改一下Menu的print()方法,让其遍历打印所有菜单子节点:
把组合模式用的迭代器补上: