迭代器模式
迭代器模式
迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供一种方法来顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示。迭代器模式将遍历元素的责任交给迭代器,而不是聚合对象本身。
迭代器模式的特点
- 分离聚合对象与遍历行为:迭代器模式将聚合对象的遍历行为抽象出来,通过迭代器来实现。
- 支持多种遍历方式:可以定义不同类型的迭代器来支持不同的遍历方式。
- 简化聚合对象:聚合对象可以专注于存储数据,而迭代器负责遍历和访问数据。
迭代器模式的结构
- 迭代器接口(Iterator):定义了访问和遍历元素的方法。
- 具体迭代器(Concrete Iterator):实现迭代器接口,对聚合对象进行具体的迭代操作。
- 聚合接口(Aggregate):定义了创建迭代器对象的接口方法。
- 具体聚合类(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}")
运行结果
说明
- 迭代器接口(Iterator):定义了访问和遍历元素的方法
has_next
和next
。 - 具体迭代器类(ConcreteIterator):实现了迭代器接口,对聚合对象进行具体的迭代操作。
- 聚合接口(Aggregate):定义了创建迭代器对象的接口方法
create_iterator
。 - 具体聚合类(ConcreteAggregate):实现了聚合接口,创建具体的迭代器对象,并提供添加元素的方法。
通过迭代器模式,客户端可以使用统一的迭代器接口遍历不同类型的聚合对象,而不需要了解聚合对象的内部结构。这种模式使得聚合对象和迭代器对象能够彼此独立地变化和复用,增加了系统的灵活性和可扩展性。