模式定义
提供一中办法程序拜访一个聚合对象中的各个元素,而又不裸露(稳固)该对象的外部示意
类图
要点总结
- 迭代形象:拜访一个聚合对象的外部而无需裸露它的外部示意
- 迭代多态:为遍历不同的汇合构造提供一个对立的接口,从而反对同样的算法在不同的汇合构造上进行操作
- 迭代器的健壮性思考:遍历的同时更改迭代器所在的汇合构造,会导致问题
Go语言代码实现
工程目录
iterator.go
package Iteratortype Iterator interface { Index() int Value() interface{} HasNext() bool Next()}type ArrayIterator struct { array []interface{} index *int}func (a *ArrayIterator) Index() *int{ return a.index}func (a *ArrayIterator) Value() interface{} { return a.array[*a.index]}func (a *ArrayIterator) HasNext() bool { return *a.index + 1 <= len(a.array)}func (a *ArrayIterator) Next() { if a.HasNext(){ *a.index++ }}
iterator_test.go
package Iteratorimport ( "fmt" "testing")func TestArrayIterator(t *testing.T) { array := []interface{}{1,3,9,2,8,7} a := 0 iterator := ArrayIterator{array: array, index: &a} for it := iterator; iterator.HasNext(); iterator.Next(){ index, value := it.Index(), it.Value().(int) for value != array[*index]{ fmt.Println("error") } fmt.Println(*index, value) }}