行为模式之迭代器模式
程序员文章站
2022-06-24 14:47:25
迭代器模式(Iterator Pattern)是最常被使用的几个模式之一,被广泛地应用到Java的API中。 定义:提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。 类图如下所示。 迭代器模式有以下4个角色。 抽象迭代器(Iterator)角色:负责定义访问和遍历元素的接口。 ......
迭代器模式(iterator pattern)是最常被使用的几个模式之一,被广泛地应用到java的api中。
定义:提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。
类图如下所示。
迭代器模式有以下4个角色。
- 抽象迭代器(iterator)角色:负责定义访问和遍历元素的接口。
- 具体迭代器(concrete iterator)角色:实现iterator接口,完成容器元素的遍历。
- 抽象聚集(aggregate)角色:提供创建迭代器角色的接口。
- 具体聚集(concrete aggregate)角色:实现抽象聚集接口,创建出容纳迭代器的对象。
iterator.java
public interface iterator { public object next(); public boolean hasnext(); }
concreteiterator.java
public class concreteiterator implements iterator { private concreteaggregate agg; private int index = 0; private int size = 0; public concreteiterator(concreteaggregate agg) { this.agg = agg; size = agg.size(); index = 0; } @override public object next() { if (index < size) { return agg.getelement(index++); } else { return null; } } @override public boolean hasnext() { return index < size; } }
aggregate.java
public interface aggregate { public void add(object obj); public iterator createiterator(); }
concreteaggregate.java
public class concreteaggregate implements aggregate { private vector vector = new vector(); @override public void add(object obj) { this.vector.add(obj); } public object getelement(int index) { if (index < this.vector.size()) { return vector.get(index); } else { return null; } } public int size() { return vector.size(); } @override public iterator createiterator() { return new concreteiterator(this); } }
client.java
public class client { public static void main(string[] args) { // 定义聚集对象 aggregate agg = new concreteaggregate(); agg.add("张三"); agg.add("李四"); agg.add("王五"); // 遍历 iterator iterator = agg.createiterator(); while (iterator.hasnext()) { system.out.println(iterator.next()); } } }
运行结果如下所示。
张三 李四 王五
优点:
- 简化了访问容器元素的操作,具备一个统一的遍历接口。
- 封装遍历算法,使算法独立于聚集角色。客户无须知道聚集对象的类型,即使聚集对象的类型发生变化,也不会影响遍历进程。
缺点:
- 给使用者一个序列化的错觉,从而产生错误。
应用场景:
- 在java开发中,尽量不要自己写迭代器模式,使用java api提供的iterator一般就能满足项目要求。
摘自:
青岛东合信息技术有限公司 . 设计模式(java版) . 电子工业出版社,2012,133-138.