迭代器模式
迭代器模式
一、概述
迭代器模式(Iterator Pattern)是一种行为型设计模式,提供了一种方法来访问聚合对象中的元素,而不必暴露该对象的内部表示。通过使用迭代器,客户端代码可以按顺序访问聚合对象的元素,而不必知道这些元素的具体实现方式。
二、角色
迭代器模式的主要角色有:
- 抽象迭代器(Iterator):定义访问和遍历元素的接口,具体迭代器必须实现这些接口。
- 具体迭代器(ConcreteIterator):实现 Iterator 接口,并存储遍历对象的当前位置。
- 抽象聚合对象(Aggregate):定义创建迭代器对象的接口。
- 具体聚合对象(ConcreteAggregate):实现 Aggregate 接口,返回一个新的具体迭代器的实例。
三、实现方式
采用迭代器模式的实现方式如下:
// 抽象迭代器
interface Iterator {
Object first();
Object next();
boolean hasNext();
}
// 具体迭代器
class ConcreteIterator implements Iterator {
private int idx;
private List<Object> items;
public ConcreteIterator(List<Object> items) {
this.items = items;
this.idx = 0;
}
public Object first() {
this.idx = 0;
return items.get(idx);
}
public Object next() {
idx++;
return items.get(idx);
}
public boolean hasNext() {
return idx < items.size() - 1;
}
}
// 抽象聚合对象
interface Aggregate {
Iterator createIterator();
}
// 具体聚合对象
class ConcreteAggregate implements Aggregate {
private List<Object> items;
public ConcreteAggregate() {
this.items = new ArrayList<>();
}
public void addItem(Object item) {
items.add(item);
}
public void removeItem(Object item) {
items.remove(item);
}
public Iterator createIterator() {
return new ConcreteIterator(items);
}
}
四、优缺点
优点
- 简化了集合类的接口,客户端不再需要了解集合的内部结构,从而使得集合的变化不会影响到客户代码;
- 提供了一种统一的访问集合的接口,使得客户代码可以更加清晰和简洁;
- 客户端可以按顺序访问集合元素,从而使得迭代器模式具有更好的扩展性和灵活性。
缺点
- 客户端仍然需要了解集合元素的具体类型;
- 迭代器模式会增加系统的复杂度和运行效率。