迭代器模式( iterator Pattern):
提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部的结构。
迭代器模式的角色:
迭代器( Iterator )、具体迭代器(ConcreteIterator)、聚合(Aggregate)和具体聚合(ConcreteAggregate);
迭代器模式的案例:
实现类图:
实现代码:
/**
* 迭代器(Iterator)
*/public interface Iterator {
Object First();
Object Next();
boolean IsDone();
Object CurrentItem();
}
import Java .util.ArrayList;
import java.util.List;
/**
* 具体迭代器(ConcreteIterator)
*/public class ConcreteIterator implements Iterator {
private List<Object> list = new ArrayList<Object>();
private int curr = 0;
public ConcreteIterator(List<Object> list) {
this.list = list;
}
public Object First() {
return list.get(0);
}
public Object Next() {
Object ret = null;
curr++;
if (curr < list.size()) {
ret = list.get(curr);
}
return ret;
}
public boolean IsDone() {
return curr >= list.size() ? true : false ;
}
public Object CurrentItem() {
return list.get(curr);
}
}
/**
* 聚合(Aggregate)
*/public abstract class Aggregate {
abstract Iterator CreateIterator();
}
import java.util.ArrayList;
import java.util.List;
/**
* 具体聚合(ConcreteAggregate)
*/public class ConcreteAggregate extends Aggregate {
private List<Object> list = new ArrayList<Object>();
public ConcreteAggregate(List<Object> list) {
this.list = list;
}
public Iterator CreateIterator() {
return new ConcreteIterator(list);
}
}
import java.util.Arrays;
import java.util.List;
/**
* 客户端
*/public class Client {
public static void main(String[] args) {
//
List<Object> list = Arrays.asList("11111111","22222222","33333333","44444444");
Aggregate aggregate = new ConcreteAggregate(list);
Iterator iterator = aggregate.CreateIterator();
// iterator.First();
while (!iterator.IsDone()) {
System.out.println(iterator.CurrentItem());
iterator.Next();
}
}
}