迭代器模式(Iterator Desgin Pattern)
迭代器模式提供了一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该集合的内部对象。最常见的迭代器模式就是循环了:
for i:=0; i<10; i++ {
println(i)
}
我们可以从迭代器会依次取出元素,当没有元素的时候,迭代终止。
代码示例
package iterator
//容器接口
type IAggregate interface {
Iterator() Iterator
}
//迭代器接口
type Iterator interface {
HasNext() bool
Current() interface{}
}
//一个容器
type MyAggregate struct {
container []int //容器中装载int类型
}
//容器的迭代器
func (a *MyAggregate) Iterator() Iterator {
return &MyIterator{aggregate: a}
}
//实现一个具体的迭代器
type MyIterator struct {
cursor int // 当前的游标
aggregate *MyAggregate // 对应的容器
}
// 判斷是否迭代到最后,如果沒有,則返回true
func (i *MyIterator) HasNext() bool {
return i.cursor < len(i.aggregate.container)
}
// 获取当前迭代元素(榕容器中取出当前游标对应的元素)
func (i *MyIterator) Current() interface{} {
current := i.aggregate.container[i.cursor]
i.next() //游标指向下一个
return current
}
// 将游标指向下一元素
func (i *MyIterator) next() {
if i.cursor < len(i.aggregate.container) {
i.cursor++
}
}
调用:
agreegate := &MyAggregate{container: []int{9, 8, 7, 6, 5, 4, 3, 2}}
iterator := agreegate.Iterator()
for iterator.HasNext() {
current := iterator.Current().(int)
fmt.Println(current)
}
// Output:
// 9
// 8
// 7
// 6
// 5
// 4
// 3
// 2