23种设计模式-14迭代器模式

迭代器模式

适合阅读本专栏的人群包括:

  • 想提升代码质量和架构思维的 Java 开发者
  • 在工作中面对复杂业务、代码难以维护的工程师
  • 想准备面试、系统复习设计模式知识的同学

阅读完本专栏,你将掌握:

  • 23 种设计模式的结构、适用场景和最佳实践
  • 面向对象六大设计原则的使用方式
  • 如何用设计模式解决常见业务场景问题
  • 如何重构低质量代码,提升扩展性与可维护性

任何问题都可以在留言区指出,作者看到后会第一时间回复。

概念总是生僻的,可以结合代码多体会多练习。

如果本文章给你带来一点点收获请点点赞支持一下,谢谢各位架构师,技术专家,专业大拿。

其他模式详解:设计模式入门

迭代器 模式(Iterator Pattern)是一种行为 设计模式,它提供了一种方法顺序访问一个聚合对象中的各个元素,而不暴露该对象的内部表示。迭代器模式常用于遍历集合类的对象,比如列表、数组等。

适用场景

  • 需要访问集合对象的内容,但不想暴露其内部结构
  • 需要提供多种遍历方式
  • 遍历集合的操作可能变化,但集合本身稳定

迭代器模式的结构

  1. 迭代器接口(Iterator):定义访问和遍历元素的接口。

  2. 具体迭代器(ConcreteIterator):实现迭代器接口,并保持对集合中当前元素的跟踪。

  3. 聚合接口(Aggregate):定义创建迭代器对象的接口。

  4. 具体聚合(ConcreteAggregate):实现聚合接口,返回一个具体迭代器的实例。

代码示例

以下是一个 Java 实现的迭代器模式示例。

我们将创建一个简单的书架类和一个用于遍历书架的迭代器。

java 复制代码
import java.util.ArrayList;
import java.util.List;

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

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

// 具体聚合类:书架
class BookShelf implements Aggregate<Book> {
    private List<Book> books;

    public BookShelf() {
        this.books = new ArrayList<>();
    }

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

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

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

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

// 具体迭代器类:书架迭代器
class BookShelfIterator implements Iterator<Book> {
    private BookShelf bookShelf;
    private int index;

    public BookShelfIterator(BookShelf bookShelf) {
        this.bookShelf = bookShelf;
        this.index = 0;
    }

    @Override
    public boolean hasNext() {
        return index < bookShelf.getLength();
    }

    @Override
    public Book next() {
        Book book = bookShelf.getBookAt(index);
        index++;
        return book;
    }
}

// 简单的书类
class Book {
    private String name;

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

    public String getName() {
        return name;
    }
}

// 客户端
public class IteratorPatternDemo {
    public static void main(String[] args) {
        BookShelf bookShelf = new BookShelf();
        bookShelf.addBook(new Book("Design Patterns"));
        bookShelf.addBook(new Book("Refactoring"));
        bookShelf.addBook(new Book("Clean Code"));

        Iterator<Book> iterator = bookShelf.createIterator();
        while (iterator.hasNext()) {
            Book book = iterator.next();
            System.out.println("Book: " + book.getName());
        }
    }
}

总结

相信小伙伴们看到 IteratorPatternDemo 客户端在使用 iterator 对象遍历时就很有感触了。

总之,当你需要遍历一个集合对象,但不想暴露其内部结构,或者希望提供多种遍历方式、统一遍历接口时,就可以使用迭代器模式。

相关推荐
2301_803554525 小时前
Pimpl(Pointer to Implementation)设计模式详解
c++·算法·设计模式
__万波__5 小时前
二十三种设计模式(七)--桥接模式
设计模式·桥接模式
老朱佩琪!6 小时前
在Unity中实现状态机设计模式
开发语言·unity·设计模式
达斯维达的大眼睛6 小时前
常用设计模式总结
设计模式
老朱佩琪!6 小时前
Unity建造者设计模式
设计模式
繁华似锦respect7 小时前
C++ 智能指针设计模式详解
服务器·开发语言·c++·设计模式·visual studio
郝学胜-神的一滴7 小时前
Linux进程创建的封装与设计模式应用:结构化分析与实践指南
linux·服务器·开发语言·c++·程序人生·设计模式
开心香辣派小星17 小时前
23种设计模式-15解释器模式
java·设计模式·解释器模式
阿杰同学1 天前
Java 设计模式 面试题及答案整理,最新面试题
java·开发语言·设计模式