64 lines
1017 B
Go
64 lines
1017 B
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
// 容器接口
|
|
type IAggregate interface {
|
|
Iterator() IIterator
|
|
}
|
|
|
|
// 迭代器接口
|
|
type IIterator interface {
|
|
HasNext() bool
|
|
Current() int
|
|
Next() bool
|
|
}
|
|
|
|
// 具体容器
|
|
type Aggregate struct {
|
|
container []int // 容器中装载 int 型容器
|
|
}
|
|
|
|
type Iterator struct {
|
|
cursor int // 当前游标
|
|
aggregate Aggregate
|
|
}
|
|
|
|
func (i *Iterator) HasNext() bool {
|
|
if i.cursor+1 < len(i.aggregate.container) {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (i *Iterator) Current() int {
|
|
return i.aggregate.container[i.cursor]
|
|
}
|
|
func (i *Iterator) Next() bool {
|
|
if i.cursor < len(i.aggregate.container) {
|
|
i.cursor++
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (a *Aggregate) Iterator() IIterator {
|
|
i := new(Iterator)
|
|
i.aggregate = a
|
|
return i
|
|
}
|
|
|
|
func main() {
|
|
// 创建容器,并放入初始化数据
|
|
c := &Aggregate{container: []int{1, 2, 3, 4}}
|
|
iterator := c.Iterator()
|
|
for {
|
|
fmt.Println(iterator.Current())
|
|
if iterator.HasNext() {
|
|
iterator.Next()
|
|
} else {
|
|
break
|
|
}
|
|
}
|
|
}
|