author: sekihin
结构图
角色
- 迭代器(Iterator)角色:负责定义和遍历元素的接口。
- 具体迭代器(Concrete Iterator)角色:实现迭代器接口,并要记录遍历中的当前位置。
- 容器(Container)角色:容器角色负责提供创建具体迭代器角色的接口。
- 具体容器(Concrete Container)角色:具体容器角色实现创建具体迭代器角色的接口——这个具体迭代器角色于该容器的结构相关。
动机
在软件构建过程中集合对象内部结构常常变化各异。但对于这些集合对象,我们希望在不暴露其内部结构的同时,可以让外部程序代码透明的访问其中包含的元素; 同时这种“透明遍历”也为“同一种算法在多种集合对象上进行操作” 提供了可能。
使用面向对象技术将这种遍历机制抽象抽象为“迭代器”为“应对变化中的集合对象”提供了一种优雅的方式。
意图
提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。
示意性代码
示意性代码
Module MainApp
Sub Main()
Dim a As New ConcreteAggregate
a(0) = "Item A"
a(1) = "Item B"
a(2) = "Item C"
a(3) = "Item D"
''Create Iterator and provide aggregate
Dim i As New ConcreteIterator(a)
Console.WriteLine("Iterating over collection -----")
Dim item As Object = i.First()
While item IsNot Nothing
Console.WriteLine(item)
item = i.Next()
End While
''Wait for user
Console.Read()
End Sub
End Module
''"Aggregate"
Public MustInherit Class Aggregate
Public MustOverride Function CreateIterator() As Iterator
End Class
''"ConcreteAggregate"
Public Class ConcreteAggregate
Inherits Aggregate
Private items As New ArrayList
Public Overrides Function CreateIterator() As Iterator
Return New ConcreteIterator(Me)
End Function
''Property
Public ReadOnly Property Count() As Integer