首页 > 代码库 > 迭代器模式

迭代器模式

1、模式定义

迭代器模式(Iterator Pattern) :提供一种方法来訪问聚合对象,而不用暴露这个对象的内部表示,其别名为游标(Cursor)。迭代器模式是一种对象行为型模式。

2、模式结构
迭代器模式包括例如以下角色:
Iterator: 抽象迭代器
ConcreteIterator: 详细迭代器
Aggregate: 抽象聚合类
ConcreteAggregate: 详细聚合类

3、模式分析
聚合是一个管理和组织数据对象的数据结构。
聚合对象主要拥有两个职责:一是存储内部数据。二是遍历内部数据。 
存储数据是聚合对象最主要的职责。
将遍历聚合对象中数据的行为提取出来。封装到一个迭代器中。通过专门的迭代器来遍历聚合对象的内部数据,这就是迭代器模式的本质。

迭代器模式是“单一职责原则”的完美体现。 

模式分析
自己定义迭代器
MyIterator——抽象迭代器
MyCollection——抽象聚合类
NewCollection——详细聚合类
NewIterator——详细迭代器
Client 

public class ConcreteIterator implements Iterator
{
	private ConcreteAggregate objects;
	
	public ConcreteIterator(ConcreteAggregate objects)
	{
		this.objects=objects;
	}
	public void first()
	{  ......  }
		
	public void next()
	{  ......  }
	public boolean hasNext()
	{  ......  }
	
	public Object currentItem()
	{  ......  }
}
public class ConcreteAggregate implements Aggregate
{	
    ......	
	public Iterator createIterator()
	{
		return new ConcreteIterator(this);
	}
	......
}

在迭代器模式中应用了工厂方法模式。聚合类充当工厂类。而迭代器充当产品类,因为定义了抽象层。系统的扩展性非常好,在client能够针对抽象聚合类和抽象迭代器进行编程。
因为非常多编程语言的类库都已经实现了迭代器模式,因此在实际使用中我们非常少自己定义迭代器。仅仅须要直接使用Java、C#等语言中已定义好的迭代器就可以,迭代器已经成为我们操作聚合对象的基本工具之中的一个。

4、模式优缺点
迭代器模式的长处
它支持以不同的方式遍历一个聚合对象。


迭代器简化了聚合类。


在同一个聚合上能够有多个遍历。
在迭代器模式中,添加新的聚合类和迭代器类都非常方便,无须改动原有代码,满足“开闭原则”的要求。

迭代器模式的缺点
因为迭代器模式将存储数据和遍历数据的职责分离,添加新的聚合类须要相应添加新的迭代器类,类的个数成对添加,这在一定程度上添加了系统的复杂性。


5、模式适用环境
在下面情况下能够使用迭代器模式:
訪问一个聚合对象的内容而无须暴露它的内部表示。
须要为聚合对象提供多种遍历方式。
为遍历不同的聚合结构提供一个统一的接口。

迭代器模式