Design Patterns(十七):Iterator Pattern--VB代码

结构图

 

角色

  • 迭代器(Iterator)角色:负责定义和遍历元素的接口。
  • 具体迭代器(Concrete Iterator)角色:实现迭代器接口,并要记录遍历中的当前位置。  
  • 容器(Container)角色:容器角色负责提供创建具体迭代器角色的接口。
  • 具体容器(Concrete Container)角色:具体容器角色实现创建具体迭代器角色的接口——这个具体迭代器角色于该容器的结构相关。

动机

  在软件构建过程中集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部程序代码透明的访问其中包含的元素;  同时这种“透明遍历”也为“同一种算法在多种集合对象上进行操作” 提供了可能。
    使用面向对象技术将这种遍历机制抽象抽象为“迭代器”为“应对变化中的集合对象”提供了一种优雅的方式。

意图

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

示意性代码

示意性代码

 

 一个实例

 下面的迭代器代码用来演示跳过某些项目遍历一个集合。

实例代码

 

Iterator Pattern模式的几个要点:
   1、迭代抽象:访问一个聚合对象的内容而无需暴露它的内部信息。
   2、迭代多态:为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作。
   3、迭代器健壮性考虑:遍历的同时更改迭代器所在的集合结构,会导致问题。

我的理解

封装集合对象的内部结构和遍历集合的算法,支持集合和算法的变化。

参考资料
《C#面向对象设计模式纵横谈系列课程(18)》     李建中老师