23种设计模式23种设计模式
首页
介绍
  • 单例模式
  • 工厂方法模式
  • 抽象工厂模式
  • 建造者模式
  • 原型模式
  • 适配器模式
  • 桥接模式
  • 组合模式
  • 装饰器模式
  • 外观模式
  • 享元模式
  • 代理模式
  • 责任链模式
  • 命令模式
  • 解释器模式
  • 迭代器模式
  • 中介者模式
  • 备忘录模式
  • 观察者模式
  • 状态模式
  • 策略模式
  • 模板方法模式
  • 访问者模式
🚀 编程指南
首页
介绍
  • 单例模式
  • 工厂方法模式
  • 抽象工厂模式
  • 建造者模式
  • 原型模式
  • 适配器模式
  • 桥接模式
  • 组合模式
  • 装饰器模式
  • 外观模式
  • 享元模式
  • 代理模式
  • 责任链模式
  • 命令模式
  • 解释器模式
  • 迭代器模式
  • 中介者模式
  • 备忘录模式
  • 观察者模式
  • 状态模式
  • 策略模式
  • 模板方法模式
  • 访问者模式
🚀 编程指南
  • 行为型模式

    • 责任链模式 (Chain of Responsibility)
    • 命令模式 (Command)
    • 解释器模式 (Interpreter)
    • 迭代器模式 (Iterator)
    • 中介者模式 (Mediator)
    • 备忘录模式 (Memento)
    • 观察者模式 (Observer)
    • 状态模式 (State)
    • 策略模式 (Strategy)
    • 模板方法模式 (Template Method)
    • 访问者模式 (Visitor)

迭代器模式 (Iterator)

📖 通俗理解

电视遥控器换台:

  • 你按"下一个"按钮,电视就换到下一个频道
  • 你不需要知道电视内部是怎么存储频道的
  • 只管按按钮就行

迭代器模式就是:提供一种方法来顺序访问集合中的元素,而不暴露集合的内部结构。

🎯 解决什么问题?

不同的集合(数组、链表、树等)有不同的遍历方式。迭代器模式提供统一的遍历接口。

🌰 生活中的例子

  • 遥控器换台
  • 播放列表播放歌曲
  • 翻书翻页

💻 Java 代码实现

场景:自定义集合迭代器

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

/**
 * 容器接口
 */
public interface Container<T> {
    Iterator<T> iterator();
}

/**
 * 书籍类
 */
public class Book {
    private String name;
    
    public Book(String name) {
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
}

/**
 * 书架(容器)
 */
public class Bookshelf implements Container<Book> {
    private Book[] books;
    private int count = 0;
    
    public Bookshelf(int size) {
        books = new Book[size];
    }
    
    public void addBook(Book book) {
        if (count < books.length) {
            books[count++] = book;
        }
    }
    
    @Override
    public Iterator<Book> iterator() {
        return new BookshelfIterator();
    }
    
    // 内部迭代器类
    private class BookshelfIterator implements Iterator<Book> {
        private int index = 0;
        
        @Override
        public boolean hasNext() {
            return index < count;
        }
        
        @Override
        public Book next() {
            return books[index++];
        }
    }
}

使用:

public class Client {
    public static void main(String[] args) {
        Bookshelf bookshelf = new Bookshelf(5);
        bookshelf.addBook(new Book("设计模式"));
        bookshelf.addBook(new Book("Java 编程思想"));
        bookshelf.addBook(new Book("深入理解 JVM"));
        
        // 使用迭代器遍历
        Iterator<Book> iterator = bookshelf.iterator();
        while (iterator.hasNext()) {
            Book book = iterator.next();
            System.out.println("📚 " + book.getName());
        }
    }
}

输出:

📚 设计模式
📚 Java 编程思想
📚 深入理解 JVM

🔥 Java 中的迭代器

Java 内置了迭代器模式:

List<String> list = Arrays.asList("A", "B", "C");

// 方式1:使用 Iterator
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
}

// 方式2:增强 for 循环(底层使用迭代器)
for (String s : list) {
    System.out.println(s);
}

✅ 适用场景

  1. 访问集合对象内容而不暴露内部结构
  2. 为不同的集合提供统一的遍历接口
  3. 需要多种遍历方式时

小结

迭代器模式:统一遍历接口,隐藏集合内部结构。

Java 的 Iterator 接口和增强 for 循环就是迭代器模式的应用。

👉 下一篇:中介者模式

Prev
解释器模式 (Interpreter)
Next
中介者模式 (Mediator)