迭代器模式
定义:提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
迭代器解决了两个不同容器的访问方式,比如说两个公司合并,但是A公司使用数组,B公司使用列表集合,两个访问方式都不一样,这时迭代器模式就派上用场了。
代码示例
抽象聚合类
public interface Company<T> {
Iterator<T> getIterator();
}
抽象迭代器
public interface Iterator<T> {
boolean hasNext();
T next();
}
具体迭代器
//数组迭代器
public class ArrayIterator<T> implements Iterator<T> {
private int index = 0;
private T[] t;
ArrayIterator(T[] t) {
this.t = t;
}
public boolean hasNext() {
return index + 1 == t.length;
}
public T next() {
return t[index++];
}
}
//列表迭代器
public class ListIterator<T> implements Iterator<T> {
private int index = 0;
private List<T> list;
public ListIterator(List<T> list) {
this.list = list;
}
public boolean hasNext() {
return list.get(index) != null;
}
public T next() {
return list.get(index++);
}
}
具体聚合类
//A公司使用列表迭代器
public class CompanyA implements Company<String> {
private List<String> list = new ArrayList<String>();
public Iterator<String> getIterator() {
return new ListIterator<String>(list);
}
}
//B公司使用数组迭代器
public class CompanyB implements Company<String> {
private String[] s = new String[] {};
public Iterator<String> getIterator() {
return new ArrayIterator(s);
}
}
客户端
CompanyA companyA = new CompanyA();
CompanyB companyB = new CompanyB();
ergodic(companyA);
ergodic(companyB);
private void ergodic(Company company) {
Iterator<String> iterator = company.getIterator();
while (iterator.hasNext()) {
String s = iterator.next();
}
}
总的来说,自己很少会去实现迭代器模式,集合类中大多都已实现迭代器模式。不足之处望指教。