迭代器模式

迭代器模式(Iterator Pattern)是一种行为型设计模式,它使得客户端可以在不暴露集合内部结构的情况下,逐个访问集合中的元素。这种设计模式的主要目的是分离集合的遍历算法和集合本身,使得两者可以独立变化。

模式结构

迭代器模式通常由以下几个角色组成:

  1. 迭代器角色(Iterator):定义了获取迭代器的接口,通常会包含 next()hasNext() 等方法。
  2. 具体迭代器角色(Concrete Iterator):实现了迭代器接口,维护对集合的引用并实现迭代的逻辑。
  3. 聚合角色(Aggregate):定义创建迭代器的接口。
  4. 具体聚合角色(Concrete Aggregate):实现聚合接口,返回一个具体的迭代器。

代码示例

下面用 Java 代码来演示迭代器模式的实现。假设我们要实现一个简单的书籍集合,并可以通过迭代器遍历书籍。

import java.util.ArrayList;
import java.util.List;

// 迭代器接口
interface Iterator<T> {
    boolean hasNext();
    T next();
}

// 具体迭代器
class BookIterator implements Iterator<Book> {
    private BookCollection bookCollection;
    private int index;

    public BookIterator(BookCollection bookCollection) {
        this.bookCollection = bookCollection;
        this.index = 0;
    }

    @Override
    public boolean hasNext() {
        return index < bookCollection.getSize();
    }

    @Override
    public Book next() {
        return bookCollection.getBookAt(index++);
    }
}

// 聚合接口
interface Aggregate {
    Iterator<Book> createIterator();
}

// 具体聚合
class BookCollection implements Aggregate {
    private List<Book> books;

    public BookCollection() {
        books = new ArrayList<>();
    }

    public void addBook(Book book) {
        books.add(book);
    }

    public Book getBookAt(int index) {
        return books.get(index);
    }

    public int getSize() {
        return books.size();
    }

    @Override
    public Iterator<Book> createIterator() {
        return new BookIterator(this);
    }
}

// 书籍类
class Book {
    private String title;

    public Book(String title) {
        this.title = title;
    }

    public String getTitle() {
        return title;
    }
}

// 客户端代码
public class Demo {
    public static void main(String[] args) {
        BookCollection bookCollection = new BookCollection();
        bookCollection.addBook(new Book("Java 设计模式"));
        bookCollection.addBook(new Book("Effective Java"));
        bookCollection.addBook(new Book("深入理解 Java 虚拟机"));

        Iterator<Book> iterator = bookCollection.createIterator();

        while (iterator.hasNext()) {
            Book book = iterator.next();
            System.out.println("书籍标题: " + book.getTitle());
        }
    }
}

代码解析

  1. Iterator接口:定义了hasNext()next()方法,用于遍历集合元素。
  2. BookIterator类:实现了Iterator接口,保存对BookCollection的引用,能够逐个访问书籍。
  3. Aggregate接口:定义了创建迭代器的方法。
  4. BookCollection类:实现了Aggregate接口,提供了添加书籍和获取书籍的方法,同时返回迭代器的实例。
  5. Book类:代表书籍对象,包含书名属性。
  6. Demo类:客户端代码,通过BookCollection添加书籍,并通过迭代器遍历输出书籍标题。

结论

迭代器模式提供了一种统一的方式去遍历不同集合对象,增加了程序的灵活性和可维护性。在实现复杂集合的遍历时,迭代器模式的引入可以极大地降低代码的耦合度。同时,由于迭代器的存在,集合内部的实现细节被隐藏,有助于实现代码的高内聚性。在实际开发中,迭代器模式常被广泛应用于Collections框架中,体现了其重要性和实用性。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部