若要通过新增集合类型扩展代码库,可以增加一个迭代器来完成扩展。
迭代器模式的意图是为顺序访问集合元素提供一种方式。
迭代器模式的结构
迭代器模式主要包含以下角色。
- 抽象聚合(Aggregate)角色:定义存储、添加、删除聚合对象以及创建迭代器对象的接口。
- 具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。
- 抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。
- 具体迭代器(Concretelterator)角色:实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。
迭代器模式的实现
迭代器模式的实现代码如下:
抽象聚合
1 | interface Aggregate |
具体聚合
1 | class ConcreteAggregate implements Aggregate |
抽象迭代器
1 | interface Iterator |
具体迭代器
1 | class ConcreteIterator implements Iterator |
运行
1 | public static void main(String[] args){ |
结果:
聚合的内容有:四川大学 电子科技大学 西南交通大学
First:四川大学
常见案例及应用场景
常见案例:JAVA 中的 iterator。
应用场景:
- 当需要为聚合对象提供多种遍历方式时。
- 当需要为遍历不同的聚合结构提供一个统一的接口时。
- 当访问一个聚合对象的内容而无须暴露其内部细节的表示时。
总结
解释器模式可以让你根据创建的类层次结构来组合可执行对象。层次结构中的每个类都实现了一个公共的操作,比如operation()。一般该方法都需要一个额外的上下文对象,用来存储重要的状态信息。
其主要优点如下:
- 访问一个聚合对象的内容而无须暴露它的内部表示。
- 遍历任务交由迭代器完成,这简化了聚合类。
- 它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。
- 增加新的聚合类和迭代器类都很方便,无须修改原有代码。
- 封装性良好,为遍历不同的聚合结构提供一个统一的接口。
其主要缺点是:增加了类的个数,这在一定程度上增加了系统的复杂性。