迭代器与组合模式

第九个模式:迭代器与组合模式

9.1问题引入:

我要需要创建一个对象,将它称为迭代器(Iterator),利用它来封装“遍历集合内的每个对象的过程”。想让我们在ArrayList上试试:

image

将它也在数组上试试:

image

9.2会见迭代器模式

关于迭代器模式,我们需要知道的就是它依赖于一个名为迭代器的接口。一旦我们有了这个接口,就可以为各种对象集合实现迭代器:数组、散列表、列表····如果我们想要为数组实现迭代器,以便使用在DinnerMenu中,看起来就像这样:

image

看看第一版的设计:

image

9.3做一些改良

我们使用Java的Iterator接口,这会带来很多的好处。

首先看看java.util.Iterator接口:

image

煎饼屋菜单和餐厅菜单的类,都实现了Menu接口,女招待可以利用接口(而不是具体类)引用每一个菜单对象。这样,通过“针对接口编程,而不针对实现编程”,我们就可以减少女招待和具体累之间的依赖。

这个新的菜单接口有一个方法,createIterator()。此方法是由煎饼屋菜单和餐厅菜单实现的。每个菜单类都必须提供适当的具体迭代器。

image

 

现在引入迭代器模式:提供了一种方法顺序访问了聚合对象中的各个元素,而又不暴露其内部的表示。

下面是迭代器模式的类图:

image

9.4组合模式的引入

组合模式:允许你将对象组合成树形结构来表示“整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。

组合模式的类图如下:

image

posted @ 2015-05-14 19:37  maverick_fu  阅读(410)  评论(0编辑  收藏  举报