模式定义

提供一中办法程序拜访一个聚合对象中的各个元素,而又不裸露(稳固)该对象的外部示意

类图

要点总结

  • 迭代形象:拜访一个聚合对象的外部而无需裸露它的外部示意
  • 迭代多态:为遍历不同的汇合构造提供一个对立的接口,从而反对同样的算法在不同的汇合构造上进行操作
  • 迭代器的健壮性思考:遍历的同时更改迭代器所在的汇合构造,会导致问题

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)   }}