迭代器模式

title

迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供一种访问容器对象中各个元素的方法,而又不暴露该容器对象的内部实现。

在迭代器模式中,容器对象包含一个迭代器,该迭代器负责遍历容器中的元素。迭代器模式将容器对象和迭代器对象分离,使得容器对象可以独立于其迭代器实现变化,从而提高了系统的灵活性和可扩展性。

迭代器模式包含两个核心角色:

  • 迭代器(Iterator):定义访问和遍历容器元素的接口。
  • 容器(Container):定义容器的接口,负责提供创建迭代器的方法。

迭代器模式的优点是:

  • 简化了容器的接口,使得容器可以独立于其迭代器的具体实现而变化。
  • 封装了容器内部的数据结构,隐藏了细节,使得对容器的访问更加安全和简单。
  • 支持多种遍历方式,例如正序遍历、倒序遍历等。
  • 可以使用不同的迭代器来遍历容器,从而实现不同的遍历算法,提高了灵活性和扩展性。

迭代器模式的缺点是:

  • 增加了系统的复杂度,需要额外的代码来实现迭代器对象。
  • 对于简单的容器对象,使用迭代器模式可能会增加代码量和复杂度,反而不如直接使用容器的内部实现来的简单。

以下是一个简单的 Java 实现迭代器模式的示例代码:

1.迭代器接口 Iterator:

public interface Iterator<T> {
    boolean hasNext();
    T next();
}

2.容器接口 Container:

public interface Container<T> {
    Iterator<T> createIterator();
}

3.具体容器类 ConcreteContainer:

import java.util.ArrayList;

public class ConcreteContainer<T> implements Container<T> {
    private ArrayList<T> list;

    public ConcreteContainer() {
        this.list = new ArrayList<>();
    }

    public void add(T element) {
        list.add(element);
    }

    public void remove(T element) {
        list.remove(element);
    }

    public Iterator<T> createIterator() {
        return new ConcreteIterator<>(list);
    }
}

4.具体迭代器类 ConcreteIterator:

import java.util.ArrayList;

public class ConcreteIterator<T> implements Iterator<T> {
    private ArrayList<T> list;
    private int cursor;

    public ConcreteIterator(ArrayList<T> list) {
        this.list = list;
        this.cursor = 0;
    }

    public boolean hasNext() {
        return cursor < list.size();
    }

    public T next() {
        T element = list.get(cursor);
        cursor++;
        return element;
    }
}

5.使用示例:

public class IteratorDemo {
    public static void main(String[] args) {
        Container<String> container = new ConcreteContainer<>();
        container.add("A");
        container.add("B");
        container.add("C");

        Iterator<String> iterator = container.createIterator();
        while (iterator.hasNext()) {
            String element = iterator.next();
            System.out.println(element);
        }
    }
}

6.输出结果:

A
B
C

在这个示例中,我们使用了迭代器模式来访问一个容器对象中的元素。具体容器类 ConcreteContainer 实现了容器接口 Container,负责提供创建迭代器的方法。具体迭代器类 ConcreteIterator 实现了迭代器接口 Iterator,负责遍历容器中的元素。最后,在使用示例中,我们通过容器对象的 createIterator 方法来获取一个迭代器对象,并通过迭代器对象的 hasNext 和 next 方法遍历容器中的元素。

powered by Gitbook© 2023 编外计划 | 最后修改: 2023-11-24 03:37:01

results matching ""

    No results matching ""