迭代器模式
迭代器模式属于行为模式.
主要用于解决对一个聚合对象中的所有元素的获取,但是同时又不会暴露该对象的内部细节。
主要分为迭代器接口,具体实现迭代器,容器,具体实现的容器
使用场景
- 访问一个对象内部的元素而不暴露内部细节
- 要获取多个对象的内部元素,提供统一的接口访问
代码示例
(一) 迭代器接口
public interface Iterator {
boolean hasNext();
Object next();
}
(二) 具体迭代器
public class ConcreteIterator implements Iterator {
private int position;
private List list = new ArrayList();
public ConcreteIterator(List list){
this.list = list;
}
@Override
public boolean hasNext() {
if (position == list.size()) {
return false;
} else {
return true;
}
}
@Override
public Object next() {
Object obj = null;
if(this.hasNext()){
obj = this.list.get(position++);
}
return obj;
}
}
(三)容器接口
public interface Aggregate {
void add(Object obj);
void remove(Object obj);
Iterator iterator();
}
(四)具体的容器
public class ConcreteAggregate implements Aggregate {
private List list = new ArrayList();
public void add(Object obj) {
list.add(obj);
}
public Iterator iterator() {
return new ConcreteIterator(list);
}
public void remove(Object obj) {
list.remove(obj);
}
}
调用方式
Aggregate aggregate=new ConcreteAggregate();
aggregate.add("1");
aggregate.add("2");
aggregate.add("3");
aggregate.add("4");
aggregate.add("5");
aggregate.add("6");
Iterator iterator = aggregate.iterator();
while (iterator.hasNext()){
System.out.println("\n"+iterator.next());
}
显示结果
1
2
3
4
5
6
总结
-
优点
- 简化遍历操作,特别是对于对象的元素遍历获取
- 外部调用只需要得到迭代器即可,内部具体遍历方式不需要关心,适用于复杂遍历
-
缺点
- 简单遍历反而增加操作,例如数组和有序列表
- 增加了一部分类
网友评论