特点
所谓迭代器模式就是提供一种方法顺序访问一个聚合对象中的各个元素,而不是暴露其内部的表示。迭代器模式是将迭代元素的责任交给迭代器,而不是聚合对象,我们甚至在不需要知道该聚合对象的内部结构就可以实现该聚合对象的迭代。通过迭代器模式,使得聚合对象的结构更加简单,它不需要关注它元素的遍历,只需要专注它应该专注的事情,这样就更加符合单一职责原则了。
主要角色
- 抽象聚合(Aggregate)角色:定义存储、添加、删除聚合对象以及创建迭代器对象的接口。
- 具体聚合(ConcreteAggregate)角色:实现抽象聚合类,返回一个具体迭代器的实例。
- 抽象迭代器(Iterator)角色:定义访问和遍历聚合元素的接口,通常包含 hasNext()、first()、next() 等方法。
- 具体迭代器(Concretelterator)角色:实现抽象迭代器接口中所定义的方法,完成对聚合对象的遍历,记录遍历的当前位置。
实现
public interface Aggregate {
void add(Object object);
void remove(Object object);
Iterator getIterator();
}
public class ConcreteAggregate implements Aggregate{
private List<Object> list = new ArrayList<>();
@Override
public void add(Object object) {
if(!list.contains(object)){
list.add(object);
}
}
@Override
public void remove(Object object) {
list.remove(object);
}
@Override
public Iterator getIterator() {
return new ConcreteIterator(list);
}
}
public interface Iterator {
Object first();
Object next();
boolean hasNext();
}
public class ConcreteIterator implements Iterator{
private List<Object> list;
private int index = -1;
public ConcreteIterator(List<Object> list){
this.list = list;
}
@Override
public Object first() {
if(hasNext()){
return list.get(0);
}
return null;
}
@Override
public Object next() {
if(hasNext()){
return list.get(++index);
}
return null;
}
@Override
public boolean hasNext() {
if(list.size()>0){
return true;
}
return false;
}
}
网友评论