1、核心
提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
2、应用场景
JDK中内置迭代器(List/Set)
3、结构
-聚合对象:存储数据
-迭代器:遍历数据
4、代码示例
/**
* 聚合接口
* @author ly1
*
*/
public interface Aggregation {
void add(Object obj);
void remove(Object obj);
Object get(int index);
MyIterator getIterator();
}
/**
* 具体聚合类,将具体迭代器定义为内部类
* @author ly1
*
*/
public class ConcreteAggregation implements Aggregation{
private List list = new ArrayList();
@Override
public void add(Object obj){
list.add(obj);
}
@Override
public void remove(Object obj){
list.remove(obj);
}
@Override
public Object get(int index){
return list.get(index);
}
@Override
public MyIterator getIterator() {
return new ConcreteIterator();
}
private class ConcreteIterator implements MyIterator{
private int cursor = -1;
@Override
public boolean hasNext() {
return ++cursor < list.size();
}
@Override
public Object Current() {
return cursor < list.size() ? list.get(cursor) : null;
}
}
}
/**
* 迭代器接口
* @author ly1
*
*/
public interface MyIterator {
/**
* 判断是有下个元素
* @return
*/
boolean hasNext();
/**
* 获取当前游标指向的对象
* @return
*/
Object Current();
}
/**
* 客户端调用
* @author ly1
*
*/
public class Client {
public static void main(String[] args) {
Aggregation set = new ConcreteAggregation();
set.add(new String("aa"));
set.add(new String("bb"));
set.add(new String("cc"));
//获取迭代器
MyIterator iter = set.getIterator();
while(iter.hasNext()){
System.out.println(iter.Current());
}
}
}
结果:
aa
bb
cc