迭代器模式


迭代器模式

一、概述

迭代器模式(Iterator Pattern)是一种行为型设计模式,提供了一种方法来访问聚合对象中的元素,而不必暴露该对象的内部表示。通过使用迭代器,客户端代码可以按顺序访问聚合对象的元素,而不必知道这些元素的具体实现方式。

二、角色

迭代器模式的主要角色有:

  1. 抽象迭代器(Iterator):定义访问和遍历元素的接口,具体迭代器必须实现这些接口。
  2. 具体迭代器(ConcreteIterator):实现 Iterator 接口,并存储遍历对象的当前位置。
  3. 抽象聚合对象(Aggregate):定义创建迭代器对象的接口。
  4. 具体聚合对象(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);
    }
}

四、优缺点

优点

  1. 简化了集合类的接口,客户端不再需要了解集合的内部结构,从而使得集合的变化不会影响到客户代码;
  2. 提供了一种统一的访问集合的接口,使得客户代码可以更加清晰和简洁;
  3. 客户端可以按顺序访问集合元素,从而使得迭代器模式具有更好的扩展性和灵活性。

缺点

  1. 客户端仍然需要了解集合元素的具体类型;
  2. 迭代器模式会增加系统的复杂度和运行效率。