迭代器模式

简介: 迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种顺序访问聚合对象中每个元素的方法,而不暴露其内部实现。

迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种顺序访问聚合对象中每个元素的方法,而不暴露其内部实现。

在迭代器模式中,有两个核心角色:Iterator(迭代器)和Aggregate(聚合对象)。Iterator(迭代器)负责定义访问和遍历元素的接口,Aggregate(聚合对象)负责定义创建迭代器对象的接口,以及返回聚合对象中包含的元素。

下面是一个简单的迭代器模式Demo,假设有一个书店系统,它包含了多本书籍,可以使用迭代器模式实现对书籍的遍历:

# 迭代器类
class BookIterator:
    def __init__(self, books):
        self._books = books
        self._index = 0

    def __next__(self):
        if self._index < len(self._books):
            book = self._books[self._index]
            self._index += 1
            return book
        else:
            raise StopIteration()

# 聚合对象类
class BookShelf:
    def __init__(self):
        self._books = []

    def add_book(self, book):
        self._books.append(book)

    def iterator(self):
        return BookIterator(self._books)

# 客户端代码
book_shelf = BookShelf()

book_shelf.add_book("Design Patterns")
book_shelf.add_book("Clean Code")
book_shelf.add_book("Refactoring")

iterator = book_shelf.iterator()
while True:
    try:
        book = next(iterator)
        print(book)
    except StopIteration:
        break

在这个Demo中,BookIterator是迭代器类,它实现了访问和遍历元素的方法。BookShelf是聚合对象类,它包含了一个列表用于存储书籍,并实现了创建迭代器对象的方法和返回聚合对象中包含的元素的方法。

当客户端使用迭代器模式时,需要先定义一个迭代器类和一个聚合对象类。聚合对象类包含了一个用于存储元素的数据结构,并实现了创建迭代器对象的方法和返回元素的方法。迭代器类负责定义访问和遍历元素的接口,并实现遍历元素的方法。

迭代器模式的应用场景比较广泛,例如:

  1. 集合类库:集合类库中,多个集合类都实现了迭代器接口,以便用户可以遍历集合中的元素。
  2. 文件系统:文件系统中,多个目录和文件之间存在包含和关联关系,可以使用迭代器模式实现对文件系统的遍历。
  3. 数据库访问:在访问数据库时,可以使用迭代器模式实现对查询结果的遍历。

补充一下,这个示例是Python代码,下面是一个相似的Java代码示例:

import java.util.*;

// 迭代器类
class BookIterator implements Iterator<String> {
   
    private final String[] books;
    private int index = 0;

    public BookIterator(String[] books) {
   
        this.books = books;
    }

    public boolean hasNext() {
   
        return index < books.length;
    }

    public String next() {
   
        if (hasNext()) {
   
            String book = books[index];
            index++;
            return book;
        } else {
   
            throw new NoSuchElementException();
        }
    }
}

// 聚合对象类
class BookShelf implements Iterable<String> {
   
    private final List<String> books = new ArrayList<>();

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

    public Iterator<String> iterator() {
   
        return new BookIterator(books.toArray(new String[0]));
    }
}

// 客户端代码
BookShelf bookShelf = new BookShelf();

bookShelf.addBook("Design Patterns");
bookShelf.addBook("Clean Code");
bookShelf.addBook("Refactoring");

for (String book : bookShelf) {
   
    System.out.println(book);
}

以下是一些学习迭代器模式的推荐资源:

《Head First 设计模式》:这是一本通俗易懂的设计模式入门书籍,其中包含了对迭代器模式的讲解和示例代码。
《设计模式:可复用面向对象软件的基础》:这是设计模式的经典著作之一,其中包含了对迭代器模式的详细讲解和示例代码。
《图解设计模式:以UML为基础,学习23种设计模式》:这是一本以图解为主的设计模式入门书籍,其中包含了对迭代器模式的详细讲解和示例代码。
Iterator Pattern的Java实现:这是一个包含了迭代器模式示例代码的Java项目,可以帮助读者更好地理解和应用迭代器模式。
GitHub链接:https://github.com/iluwatar/java-design-patterns/tree/master/iterator
总之,学习迭代器模式需要结合书籍和实践,建议读者选择一些适合自己的入门书籍,同时结合实际项目中的设计问题进行实践,加深对迭代器模式的理解和应用。

目录
相关文章
|
存储
迭代器模式
迭代器模式
66 0
|
7月前
|
设计模式 uml C++
行为型 迭代器模式
行为型 迭代器模式
45 0
|
设计模式 存储 算法
设计模式~迭代器模式(Iterator)-20
迭代器模式(Iterator Pattern)是Java和.Net编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。迭代器模式属于行为型模式。迭代器模式已经被淘汰,java中已经把迭代器运用到各个聚集类(collection)中了,使用java自带的迭代器就已经满足我们的需求了 目录 迭代器模式(Iterator) (1)优点 (2)缺点 (3)使用场景 (4)注意事项 (5)应用实例: 代码
60 0
|
容器
关于迭代器模式我所知道的
关于迭代器模式我所知道的
56 0
|
设计模式 Java 索引
Java设计模式-迭代器模式(Iterator)
Java设计模式-迭代器模式(Iterator)
|
JavaScript 前端开发
简单理解迭代器模式
这几天研究了一下迭代器模式,期间有一段时间经常搞不太懂一些概念与概念之间的关系,今天来整理一下。
132 0
|
设计模式 存储 容器
我学会了,迭代器模式
迭代器模式属于行为型模式,这个类型的设计模式总结出了 类、对象之间的经典交互方式,将类、对象的行为和使用解耦了,花式的去使用对象的行为来完成特定场景下的功能。
104 0
我学会了,迭代器模式
|
Java 容器
迭代器模式
迭代器模式
115 0
|
Java uml 容器
被用到炉火纯清的迭代器模式
迭代器模式(Iterator),提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。
118 0
被用到炉火纯清的迭代器模式
|
设计模式 存储 Java
迭代器模式:理解与实践
上面的这段代码通过循环逐一将arr的下标加1,从而实现了遍历数组的功能。 但是通过循环实现遍历的话依赖于集合对象内部,因此就有了一种能顺序访问集合对象中各个元素,又无需依赖对象内部表示的设计模式--迭代器模式。