设计模式之迭代器模式
内容抄自《设计模式》清华大学出版社,2011
模式动机:
对List或Set等集合中的元素进行遍历
模式定义:
提供一种方法来访问集合,而不用暴露这个集合对象的内部表示,其别名为游标(Cursor)。
结构分析:
包含角色:
1.Aggregate 抽象集合类(内部可以用不同的数据结构存储元素)
2.ConcreteAggregate 具体集合类
3.Iterator 抽象迭代器(可以实现不同的迭代方式)
4.ConcreteIterator 具体迭代器
优点:
- 1.它支持以不同的方式遍历一个聚合对象。
- 2.增加新的聚合类和迭代器类都很方便,符合开闭。
缺点:
增加新的聚合类要对应增加新的迭代器类,类的个数成对增加,在一定程度上增加了系统的复杂性。
适用环境:
- 1.访问一个聚合对象的内容而无须暴露它的内部表示。
- 2.需要为聚合对象提供多种遍历方式。
- 3.为遍历不同的聚合结构提供一个统一的接口。
栗子:
public class Example {
static interface Iterator{
public boolean hasNext();
public Object next();
}
static class ConcreteIterator implements Iterator{
private ConList conList;
private int index = 0;
public ConcreteIterator(ConList conList) {
this.conList = conList;
}
@Override
public boolean hasNext() {
return index<conList.objs.length;
}
@Override
public Object next() {
Object object = conList.objs[index];
index++;
return object;
}
}
static interface AbsList{
public Iterator create();
}
static class ConList implements AbsList{
public Object[] objs = new Object[20];
@Override
public Iterator create() {
return new ConcreteIterator(this);
}
}
public static void main(String[] args) {
ConList conList = new ConList();
conList.objs[0] = "ss";
conList.objs[1] = 1;
conList.objs[2] = 3;
conList.objs[3] = "ss22";
Iterator iterator = conList.create();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
ArrayList<String> s = new ArrayList<>();
}
}