跳转至

迭代器模式

迭代器模式

迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供一种方法来顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示。迭代器模式将遍历元素的责任交给迭代器,而不是聚合对象本身。

迭代器模式的特点

  1. 分离聚合对象与遍历行为:迭代器模式将聚合对象的遍历行为抽象出来,通过迭代器来实现。
  2. 支持多种遍历方式:可以定义不同类型的迭代器来支持不同的遍历方式。
  3. 简化聚合对象:聚合对象可以专注于存储数据,而迭代器负责遍历和访问数据。

迭代器模式的结构

  1. 迭代器接口(Iterator):定义了访问和遍历元素的方法。
  2. 具体迭代器(Concrete Iterator):实现迭代器接口,对聚合对象进行具体的迭代操作。
  3. 聚合接口(Aggregate):定义了创建迭代器对象的接口方法。
  4. 具体聚合类(Concrete Aggregate):实现聚合接口,创建具体的迭代器对象。

迭代器模式的Python实现

以下是迭代器模式在Python中的一个简单实现示例:

1. 定义迭代器接口和具体迭代器类

from abc import ABC, abstractmethod

# 迭代器接口
class Iterator(ABC):
    @abstractmethod
    def has_next(self):
        pass

    @abstractmethod
    def next(self):
        pass

# 具体迭代器类
class ConcreteIterator(Iterator):
    def __init__(self, collection):
        self._collection = collection
        self._index = 0

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

    def next(self):
        item = self._collection[self._index]
        self._index += 1
        return item

2. 定义聚合接口和具体聚合类

# 聚合接口
class Aggregate(ABC):
    @abstractmethod
    def create_iterator(self):
        pass

# 具体聚合类
class ConcreteAggregate(Aggregate):
    def __init__(self):
        self._data = []

    def add_item(self, item):
        self._data.append(item)

    def create_iterator(self):
        return ConcreteIterator(self._data)

3. 客户端代码

if __name__ == "__main__":
    aggregate = ConcreteAggregate()
    aggregate.add_item("Item 1")
    aggregate.add_item("Item 2")
    aggregate.add_item("Item 3")

    iterator = aggregate.create_iterator()

    while iterator.has_next():
        item = iterator.next()
        print(f"Item: {item}")

运行结果

Item: Item 1
Item: Item 2
Item: Item 3

说明

  1. 迭代器接口(Iterator):定义了访问和遍历元素的方法 has_nextnext
  2. 具体迭代器类(ConcreteIterator):实现了迭代器接口,对聚合对象进行具体的迭代操作。
  3. 聚合接口(Aggregate):定义了创建迭代器对象的接口方法 create_iterator
  4. 具体聚合类(ConcreteAggregate):实现了聚合接口,创建具体的迭代器对象,并提供添加元素的方法。

通过迭代器模式,客户端可以使用统一的迭代器接口遍历不同类型的聚合对象,而不需要了解聚合对象的内部结构。这种模式使得聚合对象和迭代器对象能够彼此独立地变化和复用,增加了系统的灵活性和可扩展性。

评论