二、DeepOps的设计模式小笔记-DAY1-Iterator迭代器

今天要来学习迭代器模式, 猛地一看真的没什么内容. 但是翻开书(设计模式)之后, 发现事情没有那么简单!

1 主要意图

迭代器模式主要:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。

2 组成

2.1 接口

  • Iterator (迭代器) : 定义访问和遍历元素的接口。
  • Aggregate (聚合) : 定义创建相应迭代器对象的接口。

2.2 实现

  • ConcreteIterator(具体迭代器):实现迭代器接口 ;对聚合遍历时跟踪当前位置。例如下图中的 BookShelfIterator 。
  • ConcreteAggregate(具体聚合):实现创建相应迭代器的接口 ;该操作返回ConcreteIterator的一个适当实例 。例如下图中的 BookShelf 。

3 迭代器模式的三个重要作用

  • 支持不同方式遍历一个聚合
  • 简化了聚合的接口
  • 在同一个聚合上可以有多个遍历

4 实现

4.1 谁来控制该迭代

是否由使用者控制迭代 ? ” ,作为 ” 外部迭代器 ” 和 ” 内部迭代器 “的区分依据。外部迭代器:必须由使用者主动推进便利的不发,现实的向迭代器请求下一元素。而内部迭代器:则只需要想起提交一个待执行操作,迭代器将会对聚合内的每一个元素应用该操作。

4.2 谁定义遍历算法

迭代器 聚合 本身的都可以定义遍历算法。

聚合 中 定义遍历算法 :这种迭代器被称作 “游标(cursor)” ,以游标为参数调用该聚合的next操作.

迭代器 中定义遍历算法 : 容易在相同的聚合上使用不同的迭代算法; 也容易在不同的聚合上重用相同的算法. 但是遍历算法可能需要访问聚合的私有变量, 这样会破坏聚合的封装性.

4.3如何保证迭代器的健壮性

健壮的迭代器, 保证插入和删除操作不会干扰遍历\不需要copy该聚合。

总结

还是 “设计模式”中描述的内容比较详尽, “图解设计模式”确实比较浅显易懂, 想多了解一些就得换一本书了, 但是不得不说, 图多的就是比字多的容易看进入.

设计模式小笔记系列

有兴趣可以看看这个教程