我们登上并非我们选择的舞台,演出并非自己选择的剧本。——爱比荷泰
**迭代器模式:**提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。
分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明的访问集合内部的数据。
**解决:**遍历不同集合中各元素
优点: 1、它支持以不同的方式遍历一个聚合对象。 2、迭代器简化了聚合类。 3、在同一个聚合上可以有多个遍历。 4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。
**缺点:**由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
类图如下:
package HeadFirstDesignMode.iterator;
/**
* 描述:迭代器模式
*/
public class IteratorPattern {
public static void main(String[] args) {
NameRepository namesRepository = new NameRepository();
for(Iterator iter = namesRepository.getIterator(); iter.hasNext();){
String name = (String)iter.next();
System.out.println("Name : " + name);
}
}
}
interface Iterator{
boolean hasNext();
Object next();
}
interface Container {
Iterator getIterator();
}
class NameRepository implements Container {
public String[] names = {"A" , "B" ,"C" , "D"};
@Override
public Iterator getIterator() {
return new NameIterator(names);
}
}
class NameIterator implements Iterator {
int index;
Object[] objects;
public NameIterator(Object[] objects) {
this.objects = objects;
}
@Override
public boolean hasNext() {
return index < objects.length;
}
@Override
public Object next() {
if(this.hasNext()){
return objects[index++];
}
return null;
}
}
标签:遍历,聚合,迭代,Iterator,模式,objects,public
From: https://blog.51cto.com/u_11906056/7011753