Iterator Pattern
迭代器模式可以把對象的訪問方式給封裝出來,只需要給某種資料結構實現自己的迭代器,使用者只需要拿到迭代器就可以輕易操作該資料結構,而不需要在乎底層實現。 實現
封裝一個容器
package iteratorimport "container/list"type Container interface{ Iterator()Iterator}type List struct{ list list.List}func (this *List)Iterator()Iterator{ return &ListIterator{this.list.Front(),this.list.Back()}}func (this *List)Add(value interface{}){ this.list.PushBack(value)}
為容器實現迭代器
package iteratorimport ( "container/list")type Iterator interface{ HasNext()bool Value()interface{} Next()}type ListIterator struct { cur *list.Element end *list.Element}func (this *ListIterator)HasNext()bool{ return this.cur != this.end}func (this *ListIterator)Next(){ this.cur=this.cur.Next()}func (this *ListIterator)Value()interface{}{ return this.cur.Value}
main.go
package mainimport ( "projects/DesignPatternsByGo/behavioralPatterns/iterator" "fmt")func main() { l := iterator.List{} l.Add(1) l.Add(2) l.Add(3) l.Add(4) i := l.Iterator() for i.HasNext(){ x := i.Value().(int) fmt.Println(x) i.Next() }}
有錢的捧個錢場,沒錢的捧個人場。
出來混不容易。