
迭代器模式是一种行为设计模式,让你能在不暴露集合底层表现形式(列表、栈和树等)的情况下遍历集合中所有的元素。
遍历聚合对象中的元素,而不需要暴露该对象的内部表示

- #!/usr/bin/env python
- # -*- coding: UTF-8 -*-
- __doc__ = """
- 迭代器模式
- 例:迭代树结构对象
- """
-
- from collections.abc import Iterable, Iterator
-
-
- class TreeNode:
- """树节点类"""
-
- def __init__(self, value):
- self.value = value
- self.children = []
-
- def add_child(self, child):
- self.children.append(child)
-
- def __str__(self, level=0):
- indent = " " * level
- result = f"{indent}{self.value}\n"
- for child in self.children:
- result += child.__str__(level + 4)
- return result
-
-
- class Tree(Iterable):
- """聚合对象"""
-
- def __init__(self, root):
- self.root = root
-
- def __iter__(self) -> Iterator:
- return TreeIterator(self.root)
-
-
- class TreeIterator(Iterator):
- """迭代器"""
-
- def __init__(self, node):
- self.stack = [node]
-
- def __next__(self):
- if not self.stack:
- raise StopIteration
-
- node = self.stack.pop()
- self.stack.extend(reversed(node.children))
- return node.value
-
-
- if __name__ == "__main__":
- """
- A
- B
- D
- E
- C
- F
- """
- # 构建树形结构
- root = TreeNode("A")
- b = TreeNode("B")
- c = TreeNode("C")
- d = TreeNode("D")
- e = TreeNode("E")
- f = TreeNode("F")
-
- root.add_child(b)
- root.add_child(c)
- b.add_child(d)
- b.add_child(e)
- c.add_child(f)
-
- # 遍历树形结构
- tree = Tree(root)
- for value in tree:
- print(value)