迭代器模式
定义:提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该对象的内部表示。
如果我们需要遍历一个聚合对象中的各个元素,通常的做法是把遍历方法写在对象这个类里,这样做如果要更改遍历方法需要修改这个对象类,违背了“开闭原则”。迭代器模式能较好的克服这个缺点。
使用场景:需要遍历一个聚合对象
就像JDK的Iterable接口一样,集合实现了来进行遍历。
正是因为有了这个模式,所以我们集合才能有foreach来遍历,因为foreach的底层就是itreable。
代码示例:
public interface Aggregate {
Iterator getIterator();
}
public class ConcreteAggregate implements Aggregate {
private static String[] names=new String[]{"xiaowang","xiaoli","abc","tiantian"};
@Override
public Iterator getIterator() {
return new ConcreteIterator(names);
}
}
public interface Iterator {
Object next();
boolean hasNext();
}
public class ConcreteIterator implements Iterator {
private String[] names;
public ConcreteIterator(String[] names) {
this.names = names;
}
private int index=-1;
@Override
public Object next() {
return names[++index];
}
@Override
public boolean hasNext() {
if(index<names.length-1)
return true;
else
return false;
}
}
测试代码:
public static void main(String[] args) throws InterruptedException, CloneNotSupportedException {
Aggregate aggregate=new ConcreteAggregate();
Iterator iterator = aggregate.getIterator();
while (iterator.hasNext()){
Object next = iterator.next();
System.out.println(next);
}
}