迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供一种顺序访问集合元素的方法,而无需暴露集合的内部表示。通过迭代器模式,可以在不暴露集合底层结构的情况下,访问集合中的每个元素。

迭代器模式包含以下主要角色:

1. 迭代器接口(Iterator): 定义了访问和遍历集合元素的接口,通常包含 has_next 和 next 方法。

2. 具体迭代器类(ConcreteIterator): 实现了迭代器接口,负责对集合进行迭代。

3. 可迭代对象接口(Iterable): 定义了创建迭代器对象的接口。

4. 具体可迭代对象类(ConcreteIterable): 实现了可迭代对象接口,负责创建具体迭代器对象。

5. 客户端(Client): 使用迭代器模式来访问集合元素,而不必关心集合的内部结构。

下面是一个简单的迭代器模式的例子,假设我们有一个书架(Bookshelf)类,表示一组书籍,我们希望通过迭代器来遍历书架中的书籍:
# 迭代器接口
class Iterator:
    def has_next(self):
        pass

    def next(self):
        pass

# 可迭代对象接口
class Iterable:
    def create_iterator(self):
        pass

# 具体迭代器类
class BookIterator(Iterator):
    def __init__(self, bookshelf):
        self._bookshelf = bookshelf
        self._index = 0

    def has_next(self):
        return self._index < len(self._bookshelf)

    def next(self):
        book = self._bookshelf[self._index]
        self._index += 1
        return book

# 具体可迭代对象类
class Bookshelf(Iterable):
    def __init__(self):
        self._books = []

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

    def __getitem__(self, index):
        return self._books[index]

    def create_iterator(self):
        return BookIterator(self)

# 客户端代码
if __name__ == "__main__":
    # 创建可迭代对象
    bookshelf = Bookshelf()
    bookshelf.add_book("Book 1")
    bookshelf.add_book("Book 2")
    bookshelf.add_book("Book 3")

    # 创建迭代器并遍历书架中的书籍
    iterator = bookshelf.create_iterator()
    while iterator.has_next():
        book = iterator.next()
        print("Book:", book)

在上述示例中,Iterator 是迭代器接口,Iterable 是可迭代对象接口。BookIterator 是具体迭代器类,负责对书架进行迭代。Bookshelf 是具体可迭代对象类,负责存储书籍,并创建相应的迭代器。

客户端代码通过迭代器模式遍历书架中的书籍,而不必关心书架的内部结构。

迭代器模式的优点在于它提供了一种统一的遍历接口,使得客户端可以对集合元素进行统一的访问,而不必关心集合的内部实现。这种模式使得集合和迭代算法能够独立变化。


转载请注明出处:http://www.zyzy.cn/article/detail/11854/设计模式