迭代器模式思维导图
设计模式-迭代器模式
1、定义
提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。
(将遍历集合的任务交给迭代器。)
2、分类&别名
分类:行为型模式
别名:游标
3、优点
优点:
用户使用迭代器访问集合中的对象,不需要知道这些对象在集合中是如何表示的;
可同时使用多个迭代器遍历一个集合。
简化聚合接口;
方便添加新的聚合类或者迭代器类;
支持以不同的方式遍历一个聚合对象。
4、适用场景
希望对遍历不同的集合提供一个统一接口;
让用户访问集合中的对象,但不想暴露对象在集合中的存储结构。
5、UML类图
四种角色:
集合 Aggregate:规定具体集合需实现的操作。
迭代器 Iterator:规定遍历具体集合的方法。
具体集合 ConcreteAggregate:设置一个方法返回针对该集合的具体迭代器。
具体迭代器 ConcreteIterator
6、代码实现
//step1. 集合 Aggregate:规定具体集合需实现的操作
interface Aggregate {
public Iterator createIterator();
}
//step2. 迭代器 Iterator:规定遍历具体集合的方法
interface Iterator {
public Object next();
public boolean hasNext();
}
//step3. 具体集合 ConcreteAggregate:设置一个方法返回针对该集合的具体迭代器
class ConcreteAggregate implements Aggregate {
private Object[] tv = {"cctv-1", "cctv-2", "cctv-3"};
public Iterator createIterator() {
return new ConcreteIterator();
}
//step4. 具体迭代器 ConcreteIterator
class ConcreteIterator implements Iterator {
public int cursorIndex = 0;
public Object next() {
if(this.hasNext())
return tv[cursorIndex++];
return null;
}
public boolean hasNext() {
if(cursorIndex < tv.length)
return true;
return false;
}
}
}
//step5. Demo
public class TestAwen {
public static void main(String[] args) {
Aggregate aggregate = new ConcreteAggregate();
Iterator iterator = aggregate.createIterator();
while (iterator.hasNext())
System.out.println(iterator.next().toString());
}
}
运行结果截图