-
迭代器模式(Interator)提供了一种顺序访问一个聚合对象中的各种元素,而又不暴露该对象内部。
-
迭代器模式的UML图
-
Interator,遍历器角色,定义遍历元素需要的方法,一般会有三个方法,next(),hasNext(),remove();Concrete Interator具体迭代器,完成集合的迭代;Aggegate一般是一个接口,提供了intorator()的方法,例如Collection, List, Set等接口;Concrete Aggegate具体的容器类
-
迭代器模式的代码实现
-
创建一个抽象迭代器接口
/** * 抽象迭代器,提供迭代过程中的方法 */ public interface Interator { boolean hasNext(); Object next(); }
-
创建一个抽象容器接口
/** * 抽象容器类,需要被遍历的对象,提供增删改查容器的方法 * 需要提供获取迭代器的方法 */ public interface ListAggregate { void add(Object object); Object get(int index); int getSize(); //获取迭代器 Interator getInterator(); }
-
创建一个具体的迭代器(包含对容器的引用)
/** * 具体迭代器,需要对容器进行迭代 */ public class ConcreteInterator implements Interator { //具体迭代类要与容器角色有一个关系 private ListAggregate listAggregate; private int index; public ConcreteInterator(ListAggregate listAggregate) { this.listAggregate = listAggregate; } @Override public boolean hasNext() { if(index >= listAggregate.getSize()){ return false; } return true; } @Override public Object next() { Object o = listAggregate.get(index); index++; return o; } }
-
创建一个具体的容器类
/** * 具体容器类 * 实现getInterator,找到属于自己的interator */ public class ConcreteListAggregate implements ListAggregate{ private Object[] list; private int size = 0; private int index = 0; public ConcreteListAggregate() { size = 0; index = 0; list = new Object[100]; } @Override public void add(Object object) { list[index++] = object; size++; } @Override public Object get(int index) { return list[index]; } @Override public int getSize() { return size; } @Override public Interator getInterator() { return new ConcreteInterator(this); } }
-
创建测试类
public class Test { public static void main(String[] args) { ListAggregate list = new ConcreteListAggregate(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); Interator interator = list.getInterator(); while (interator.hasNext()){ System.out.print(interator.next().toString() + " "); } } }
-
-
迭代器模式的优点
- 支持以不同的方式遍历一个容器对象
- 迭代器简化了聚合类
- 在迭代器模式中,增加新的聚合类和迭代器类都很方便,无需修改原有代码
-
迭代器模式的缺点
- 由于迭代器模式将存储数据与遍历数据的职责分离,增加新的聚合类需要增减对应的迭代器类,类的个数承兑增加,在一定程度上增加了系统的复杂性
-
迭代器模式的使用场景
- 访问一个聚合对象的内容而无需暴露它的内部
- 需要为聚合对象提供多种遍历方式
- 为遍历不同的聚合结构提供一个统一的接口
-
JDK中对迭代器模式的使用
java.util.Interator
设计模式--迭代器模式
最新推荐文章于 2024-08-29 17:15:49 发布