设计模式(18) 迭代器模式(简单入门 行为模式)
设计图和源代码请访问我的github:https://github.com/yangsheng20080808/DesignModel
From Now On,Let us begin Design Patterns。
迭代器模式
定义
- 它提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。 Provide a way to access the elements of an aggregate object sequentially without exposing its underlying representation.
这个模式希望达到的效果是:我们可以自行拓展需要遍历的对象,添加其他的分支,而不用修改客户端和其他任何地方,就能够遍历我们的数据结构。
通用类图:
迭代器模式的优点:
它支持以不同的方式遍历一个聚合对象。
迭代器简化了聚合类。遍历的逻辑已经独立到另外一个类里面了,集合类只需要关系内部结构即可。
在迭代器模式中,增加新的聚合类和迭代器类都很方便,可以方便的添加分支集合,无须修改原有代码。
迭代器模式的缺点:
- 由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
迭代器模式的使用场景:
访问一个聚合对象的内容而无须暴露它的内部表示。
需要为聚合对象提供多种遍历方式。我们只需要实现多个具体的遍历方式用同一个接口。
为遍历不同的聚合结构提供一个统一的接口。
迭代器模式的注意事项:
这个没什么好注意的,很好的一个模式。用就行。
迭代器模式的例子:
我借用《Head first 设计模式》里面的例子给大家分享一下:
具体的菜单项, ArrayList和数组的基本元素.
菜单接口(interface), 包含创建迭代器(createIterator)的方法.
ArrayList类型的早餐菜单, 包含迭代器的方法, 可以直接返回.
晚餐菜单,数组类型, 创建相应的迭代器类, 继承(implements)迭代器(Iterator), 重写迭代器的方法.
实现迭代器:
服务员拿着菜单接客:
饭店里面吃饭: