迭代器模式包含以下主要角色:
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/设计模式