设计模式——迭代器模式(Iterator)

迭代器模式(Iterator Pattern)是一种行为设计模式,它使得我们能够顺序地访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式为遍历不同的聚合结构提供了一个统一的接口,使得客户端代码可以独立于聚合对象的变化。

迭代器模式结构

迭代器模式主要由以下几个角色组成:

  1. 迭代器(Iterator):定义访问和遍历元素的接口。
  2. 具体迭代器(Concrete Iterator):实现迭代器接口,并跟踪遍历中的当前位置。
  3. 聚合(Aggregate):定义创建迭代器对象的接口。
  4. 具体聚合(Concrete Aggregate):实现聚合接口,返回一个具体迭代器的实例。
  5. 客户端(Client):持有对聚合对象和迭代器的引用,并调用迭代器的接口来遍历聚合对象。

迭代器模式优点

  1. 支持以不同方式遍历一个聚合:通过提供不同的迭代器,可以支持不同的遍历方式。
  2. 简化聚合的接口:聚合对象不再需要暴露其内部表示,只需要提供一个创建迭代器的方法。
  3. 对聚合对象的修改更加安全:因为客户端代码是通过迭代器来访问聚合对象的,所以聚合对象的内部表示可以被隐藏和保护起来。

迭代器模式示例

假设我们有一个BookCollection(书籍集合)类,它包含多个Book对象。我们想要遍历这个集合并访问其中的每一本书。我们可以使用迭代器模式来实现这个功能。

聚合接口和具体聚合
// 聚合接口
interface BookCollection {
    Iterator<Book> createIterator();
}

// 具体聚合
class MyBookCollection implements BookCollection {
    private List<Book> books = new ArrayList<>();

    // 添加书籍到集合中
    public void addBook(Book book) {
        books.add(book);
    }

    // 创建迭代器
    @Override
    public Iterator<Book> createIterator() {
        return new BookIterator(books.iterator());
    }
}
迭代器接口和具体迭代器
// 迭代器接口
interface Iterator<T> {
    boolean hasNext();
    T next();
}

// 具体迭代器
class BookIterator implements Iterator<Book> {
    private Iterator<Book> iterator;

    public BookIterator(Iterator<Book> iterator) {
        this.iterator = iterator;
    }

    @Override
    public boolean hasNext() {
        return iterator.hasNext();
    }

    @Override
    public Book next() {
        return iterator.next();
    }
}
客户端代码
// 客户端代码
public class Client {
    public static void main(String[] args) {
        BookCollection bookCollection = new MyBookCollection();
        bookCollection.addBook(new Book("Java设计模式"));
        bookCollection.addBook(new Book("C++编程思想"));

        // 获取迭代器并遍历集合
        Iterator<Book> iterator = bookCollection.createIterator();
        while (iterator.hasNext()) {
            Book book = iterator.next();
            System.out.println(book.getTitle());
        }
    }
}

// Book类(示例用)
class Book {
    private String title;

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

    public String getTitle() {
        return title;
    }
}

在上面的示例中,我们定义了一个BookCollection接口和一个MyBookCollection具体聚合类,以及一个Iterator接口和一个BookIterator具体迭代器类。客户端代码通过调用MyBookCollectioncreateIterator方法来获取一个迭代器,并使用这个迭代器来遍历集合中的书籍。这样,我们就实现了迭代器模式。

相关推荐

  1. 设计模式模式Iterator

    2024-05-11 01:28:05       37 阅读
  2. 设计模式——模式Iterator

    2024-05-11 01:28:05       32 阅读
  3. 模式Iterator

    2024-05-11 01:28:05       61 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 01:28:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 01:28:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 01:28:05       87 阅读
  4. Python语言-面向对象

    2024-05-11 01:28:05       96 阅读

热门阅读

  1. MySQL环境搭建

    2024-05-11 01:28:05       34 阅读
  2. 产业链图谱在优化供应链管理中的作用

    2024-05-11 01:28:05       35 阅读
  3. Channel实现Flutter与原生平台之间的双向通信

    2024-05-11 01:28:05       27 阅读
  4. 达梦数据库常用命令整理

    2024-05-11 01:28:05       25 阅读
  5. Android 11.0 mtk平台系统添加公共so库的配置方法

    2024-05-11 01:28:05       31 阅读
  6. VUE中可适化大屏的自适应

    2024-05-11 01:28:05       33 阅读
  7. 飞天使-k8s知识点29-kubernetes安装1.28.0版本

    2024-05-11 01:28:05       27 阅读
  8. 第 7 章 MyBatis 缓存配置

    2024-05-11 01:28:05       26 阅读
  9. 自动选择图表类型:基于数据特征智能决策

    2024-05-11 01:28:05       32 阅读