58 lines
1.4 KiB
Go
Raw Normal View History

2020-04-21 22:50:21 +08:00
package iterator
2020-05-03 02:53:02 +08:00
////////////////////////////////
//使用景点例子
2020-04-21 22:50:21 +08:00
2020-05-03 02:53:02 +08:00
//ITouristMap 游客地图是一个迭代器Iterator为用户提供当前景区中不同景点的统一访问能力
type ITouristMap interface {
FirstPot() //首个景点
IsLastPot() bool //当前景点是否是最后一个
Next() interface{} //下一个景点
2020-04-21 22:50:21 +08:00
}
2020-05-03 02:53:02 +08:00
//IScenicArea 是一个针对景区的Aggregate聚合类型接口返回一个迭代器接口
//IScenicArea 返回一个游客访问接口
type IScenicArea interface {
Iterator() ITouristMap
2020-04-21 22:50:21 +08:00
}
2020-05-03 02:53:02 +08:00
//ScenicArea 景区包含所有的景点
type ScenicArea struct {
count int //景点的数量
pots []interface{} //景点列表,景区可能一直在开发新的景点,所以景区的数量可能一直在增长
2020-04-21 22:50:21 +08:00
}
2020-05-03 02:53:02 +08:00
//Iterator 通过
func (s *ScenicArea) Iterator() ITouristMap {
return &ScenicAreaPotsMap{
2020-04-21 22:50:21 +08:00
numbers: n,
next: n.start,
}
}
2020-05-03 02:53:02 +08:00
//ScenicAreaPotsMap 就是景区提供的迭代器类型,要实现具体的景区景点的迭代访问能力
type ScenicAreaPotsMap struct {
2020-04-21 22:50:21 +08:00
numbers *Numbers
next int
}
2020-05-03 02:53:02 +08:00
//FirstPot 第一个景点
func (i *ScenicAreaPotsMap) FirstPot() {
2020-04-21 22:50:21 +08:00
i.next = i.numbers.start
}
2020-05-03 02:53:02 +08:00
//IsLastPot 是否是最后一个
func (i *ScenicAreaPotsMap) IsLastPot() bool {
2020-04-21 22:50:21 +08:00
return i.next > i.numbers.end
}
2020-05-03 02:53:02 +08:00
//Next 去路线上的下一个景点
func (i *ScenicAreaPotsMap) Next() interface{} {
2020-04-21 22:50:21 +08:00
if !i.IsDone() {
next := i.next
i.next++
return next
}
return nil
}