关于设计模式:设计模式迭代器Iterator模式

48次阅读

共计 881 个字符,预计需要花费 3 分钟才能阅读完成。

模式定义

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

类图

要点总结

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

Go 语言代码实现

工程目录

iterator.go

package Iterator

type 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 Iterator

import (
   "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)
   }
}

正文完
 0