一句话总结
提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。例如foreach, for in方法,就是采用的迭代器模式。
Code
static func main() {
let concreteAggregate = ConcreteAggregate()
concreteAggregate[0] = "小明"
concreteAggregate[1] = "小方"
let concreteIterator = ConcreteIterator(concreteAggregate: concreteAggregate)
while !concreteIterator.isDone() {
print(concreteIterator.currentItem())
concreteIterator.next()
}
}
protocol Iterator {
func first() -> Any
func next() -> Any?
func isDone() -> Bool
func currentItem() -> Any
}
protocol Aggregate {
func createIterator() -> Iterator
}
class ConcreteIterator: Iterator {
let concreteAggregate: ConcreteAggregate
var current = 0
init(concreteAggregate: ConcreteAggregate) {
self.concreteAggregate = concreteAggregate
}
func first() -> Any {
concreteAggregate[0]
}
func next() -> Any? {
current += 1
if current < concreteAggregate.count() {
return concreteAggregate[current]
}
return nil
}
func isDone() -> Bool {
current >= concreteAggregate.count()
}
func currentItem() -> Any {
concreteAggregate[current]
}
}
class ConcreteAggregate: Aggregate {
var items: [Any] = []
func createIterator() -> Iterator {
ConcreteIterator(concreteAggregate: self)
}
func count() -> Int {
items.count
}
subscript(index: Int) -> Any {
get {
items[index]
}
set {
//此处为伪代码
items[index] = newValue
}
}
}