设计模式(18) 迭代器模式(简单入门 行为模式)

来源:互联网 发布:专业淘宝食品图片拍摄 编辑:程序博客网 时间:2024/05/18 01:22

设计图和源代码请访问我的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), 重写迭代器的方法.
这里写图片描述
实现迭代器:
这里写图片描述

服务员拿着菜单接客:
这里写图片描述

饭店里面吃饭:
这里写图片描述

阅读全文
0 0