[Design] Iterator Pattern

  行为模式主要是责任和算法的抽象化。行为模式不仅仅是关于类和对象的,而且是关于它们之间的相互作用的。
  行为模式分为类的行为模式和对象的行为模式两种。
类的行为模式
    类的行为模式使用继承关系在几个类之间分配行为。
对象的行为模式
    对象的行为模式则使用对象的聚合来分配行为。
--------------------------------------------------------
迭代子(Iterator)模式

迭代子(Iterator)模式是对象的行为模式,又叫做游标(Cursor)模式。迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象。

 

迭代子模式的一般性结构

1.        抽象迭代子(Iterator)角色

定义出遍历元素所需的接口。

2.        具体迭代子(Concrete Iterator)角色

此角色实现抽象迭代子角色所定义的接口,并保持迭代过程的游标位置。

3.        抽象聚集(Aggregate)角色

此抽象角色给出创建迭代子对象的接口。

4.        具体聚集(Concrete Aggregate)角色

实现抽象聚集角色所定义的接口,返回一个合适的具体迭代子实例。

5.        客户端(Client)角色

持有对聚集及其迭代子对象的引用,调用迭代子对象的迭代接口,也有可能通过迭代子操作聚集元素的增加和删除。

 

宽接口和窄接口

如果一个聚焦的接口提供了可以用来修改聚集元素的方法,这个接口就是所谓的宽接口;

如果一个聚集的接口没有提供修改聚集元素的方法,这样的接口就是所谓的窄接口。

白箱聚集

如果聚焦对所有对象提供宽接口的话,这样会破坏聚焦对象的封装,这种聚集叫做白箱聚集。白箱聚焦向外界提供同样的宽接口。

由于聚集自己实现迭代逻辑,并向外部提供适当的接口,使得迭代可以从外部控制聚焦的迭代过程。这样一样迭代子所控制的仅仅是一个游标而已。这种迭代子叫做游标迭代子。由于迭代子是在聚焦的结构之外的,因此这样的迭代子以叫做外禀迭代子(Extrinsic Iterator)

黑箱聚集

聚焦对象为迭代子对象提供一个宽接口,而为其他对象提供一个窄接口。换言之,聚焦对象的内部结构应当对迭代子对象适当公开,以便迭代子对象能够对聚集对象有足够的了解,从而可以进行迭代操作。但是,聚集对象应当避免向其他对象提供这些方法,因为其他对象应当经过迭代子对象进行这些工作,而不是直接操控聚集对象。这样同时保证聚集对象的封装和迭代功能的方案叫做黑箱实现方案。

由于迭代子是聚集的内部类,迭代子可以自由访问聚集元素,所以迭代子可以自行迭代功能并控制对聚集的迭代逻辑。由于迭代子是在聚集的结构之内定义的,因此这样的迭代子以叫做内禀迭代子(Intrinsic Iterator)

posted @ 2009-04-23 11:04  ABeen  阅读(308)  评论(0编辑  收藏  举报