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 对象遍历时就很有感触了。

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

相关推荐
qqxhb9 小时前
26|Agent 设计模式:ReAct、Plan-and-Solve 与反射
设计模式·react模式·plan-and-solve·reflection模式
hssfscv9 小时前
软件设计师下午题六——Java的各种设计模式
java·算法·设计模式
zhaoshuzhaoshu12 小时前
设计模式之创建型设计模式详细解析(含示例)
单例模式·设计模式·架构
倚楼盼风雨12 小时前
浅析设计模式-23种设计模式剖析
设计模式
Momentary_SixthSense2 天前
设计模式之工厂模式
java·开发语言·设计模式
Java码农也是农2 天前
Multi-Agent 系统设计模式
设计模式·agent·multi-agent
sg_knight2 天前
设计模式实战:状态模式(State)
python·ui·设计模式·状态模式·state
workflower2 天前
深度学习是通用型人工智能的基础
人工智能·深度学习·设计模式·软件工程·软件构建·制造
Meme Buoy2 天前
11.3设计模式-新
设计模式
cmpxr_2 天前
【单片机】常用设计模式
单片机·嵌入式硬件·设计模式