迭代器模式是一种行为型设计模式,它提供一种访问聚合对象(如列表、集合)元素的方法,而不需要暴露该对象的内部表示。迭代器模式属于行为型设计模式,它定义了一种方法,通过该方法可以顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示。

在迭代器模式中,有两个主要角色:

1. 迭代器接口(Iterator): 定义了遍历元素的方法,包括判断是否还有下一个元素、获取下一个元素等。
public interface Iterator {
    boolean hasNext();
    Object next();
}

2. 具体迭代器(ConcreteIterator): 实现了迭代器接口,负责实现对聚合对象的遍历。
public class ConcreteIterator implements Iterator {
    private ConcreteAggregate aggregate;
    private int index = 0;

    public ConcreteIterator(ConcreteAggregate aggregate) {
        this.aggregate = aggregate;
    }

    @Override
    public boolean hasNext() {
        return index < aggregate.size();
    }

    @Override
    public Object next() {
        if (hasNext()) {
            return aggregate.getElement(index++);
        }
        return null;
    }
}

3. 聚合接口(Aggregate): 定义了创建迭代器对象的接口。
public interface Aggregate {
    Iterator createIterator();
    // 其他聚合操作
}

4. 具体聚合(ConcreteAggregate): 实现了聚合接口,负责创建具体的迭代器对象。
import java.util.ArrayList;
import java.util.List;

public class ConcreteAggregate implements Aggregate {
    private List<Object> elements = new ArrayList<>();

    public void addElement(Object element) {
        elements.add(element);
    }

    public Object getElement(int index) {
        return elements.get(index);
    }

    public int size() {
        return elements.size();
    }

    @Override
    public Iterator createIterator() {
        return new ConcreteIterator(this);
    }
}

5. 客户端代码: 使用迭代器模式来遍历聚合对象中的元素。
public class Client {
    public static void main(String[] args) {
        ConcreteAggregate aggregate = new ConcreteAggregate();
        aggregate.addElement("Element 1");
        aggregate.addElement("Element 2");
        aggregate.addElement("Element 3");

        Iterator iterator = aggregate.createIterator();

        while (iterator.hasNext()) {
            Object element = iterator.next();
            System.out.println("Element: " + element);
        }
    }
}

在这个例子中,迭代器模式使得客户端代码可以通过统一的接口遍历不同类型的聚合对象,而不需要了解其内部结构。这提高了代码的灵活性和可维护性。


转载请注明出处:http://www.zyzy.cn/article/detail/13953/设计模式