Iterator 迭代器 行为模式,提供一种顺序访问一个聚合对象中的各个元素的方法,而又不破坏该聚合对象的内部表示。
别名游标,这个模式,在Composite模式的例子一时实际上已经用到了,而且在Flex中的也是有的。比如,Flex中有个类叫ArrayColllection有一个方法叫createCursor():IViewCursor。Iterator模式还是比较好理解的。
迭代器模式由一下几种组成元素:
迭代器接口:用于对几何数据进行迭代的接口
具体迭代器
集合接口
具体集合
下面来看一下代码:
IIterator.as
package {
public interface IIterator {
function reset();
function next();
function hasNext():Boolean;
}
}
来看一个具体的迭代器
ArrayIterator.as
package {
public class ArrayIterator implements IIterator {
private var collection:Array;
private var index = 0;
public function ArrayIterator(collection:Array) {
this.collection = collection;
}
public function hasNext():Boolean {
return index < collection.length;
}
public function next():Object {
return collection[index++];
}
public function reset():void {
index = 0;
}
}
}
有种特殊的迭代器,叫Null迭代器,使用Null迭代器可以创建一个和接口紧密相连、但不用包含任何集合数据的类。如下定义:
NullIterator.as
package {
public class NullIterator implements IIterator {
public function NullIterator() {
}
public function hasNext():Boolean {
return false;
}
public function next():Object {
return null;
}
public function reset():void {}
}
}