设计模式这样玩泰简单(Golang版)-迭代器模式
Posted hello_读书就是赚钱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式这样玩泰简单(Golang版)-迭代器模式相关的知识,希望对你有一定的参考价值。
场景
老板:现在有一个对象拥有一个私有的属性,是一个列表.设计一个方案,在列表指针不暴露出去的情况下让这个列表能被迭代访问
你:好的老板,那就使用迭代器模式
方案
迭代器模式,指的是用对象来封装访问一个列表的行为,其效果与for循环是一样的,但是保护了真正的列表可以不被外界访问,又能访问到列表的真正内容.在Java中我们也很经常用迭代器来做操作,像常用的List,Set,Map都可以通过那个对象创建一个迭代器对象,但是在golang中却没有,所以golang入门的同学了解这知识点可能比较陌生,下面我们通过代码来看看是如何利用组合的模式用对象来保护一个列表指针不对外暴露.
实现
see:https://github.com/jjtHappy/design-pattern-so-simple
package main
import "fmt"
type Iterator interface {
HasNext() bool
Next() string
SetList([]string)
}
type IteratorImpl struct {
index int32
list []string
}
func (i *IteratorImpl) HasNext() bool {
return i.index<int32(len(i.list))
}
func (i *IteratorImpl) Next() string {
r:=i.list[i.index]
i.index++
return r
}
func (i *IteratorImpl) SetList(list [] string){
i.list=list
}
type ListOwner struct{
List []string
}
func (io *ListOwner) Iterator() (i Iterator) {
i=&IteratorImpl{}
i.SetList(io.List)
return i
}
func main() {
fmt.Println("老板:实现一个迭代器")
fmt.Println("你:好的老板")
lo:=ListOwner{
List: []string{"hello","world"},
}
i:=lo.Iterator()
for i.HasNext() {
fmt.Println(i.Next())
}
}
以上是关于设计模式这样玩泰简单(Golang版)-迭代器模式的主要内容,如果未能解决你的问题,请参考以下文章