【起源】
我们希望封装集合对象的内部结构,同时让客户代码透明的访问集合内部的子元素。
将“透明遍历”作为一种算法抽象出来,任何集合对象都可实现,它被叫做迭代器。
【动机】
提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表示。
【核心】
1.Client利用迭代器实现“透明遍历”(foreach)
2.聚合对象提供迭代器(IEnumerable)
3.迭代器实现这三个重要的方法(IEnumerator):
Current : 取出当前元素
MoveNext() : 指向下一元素
Reset() : 指向第一个元素
C#语言机制帮我们实现了1(foreach)和3(yield return 子元素),我们只需要完成2,即提供迭代器。
两个缺陷:1.遍历时不能改变集合结构 2.遍历时只能访问子元素,不能替换元素。
【代码实例】
【模型图】