共计 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)
}
}
正文完