第九个模式:迭代器与组合模式java
9.1问题引入:编程
我要须要建立一个对象,将它称为迭代器(Iterator),利用它来封装“遍历集合内的每一个对象的过程”。想让咱们在ArrayList上试试:数组
将它也在数组上试试:设计
9.2会见迭代器模式3d
关于迭代器模式,咱们须要知道的就是它依赖于一个名为迭代器的接口。一旦咱们有了这个接口,就能够为各类对象集合实现迭代器:数组、散列表、列表····若是咱们想要为数组实现迭代器,以便使用在DinnerMenu中,看起来就像这样:对象
看看初版的设计:blog
9.3作一些改良接口
咱们使用Java的Iterator接口,这会带来不少的好处。get
首先看看java.util.Iterator接口:it
煎饼屋菜单和餐厅菜单的类,都实现了Menu接口,女招待能够利用接口(而不是具体类)引用每个菜单对象。这样,经过“针对接口编程,而不针对实现编程”,咱们就能够减小女招待和具体累之间的依赖。
这个新的菜单接口有一个方法,createIterator()。此方法是由煎饼屋菜单和餐厅菜单实现的。每一个菜单类都必须提供适当的具体迭代器。
如今引入迭代器模式:提供了一种方法顺序访问了聚合对象中的各个元素,而又不暴露其内部的表示。
下面是迭代器模式的类图:
9.4组合模式的引入
组合模式:容许你将对象组合成树形结构来表示“总体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。
组合模式的类图以下: