Golang设计模式——07迭代器模式

简介: Golang设计模式——07迭代器模式

迭代器模式

提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。

优点

  1. 可以提供多种遍历方式,比如说对有序列表,我们可以根据需要提供正序遍历,倒序遍历两种迭代器,用户用起来只需要得到我们实现好的迭代器,就可以方便的对集合进行遍历了。
  2. 封装性良好,用户只需要得到迭代器就可以遍历,而对于遍历算法则不用去关心。

缺点

  1. 每个聚合对象都要一个迭代器,会生成多个迭代器不好管理类
  2. 提供一个统一的方法遍历对象,客户不用再考虑聚合的类型,使用一种方法就可以遍历对象了。

场景

  1. 迭代器模式是与集合共生共死的,一般来说,我们只要实现一个集合,就需要同时提供这个集合的迭代器,像 go的range,假如我们要实现一个这样的新的容器,当然也需要引入迭代器模式,给我们的容器实现一个迭代器。

代码

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++
  }
}
package Iterator
import (
  "fmt"
  "testing"
)
func TestArrayIterator_Value(t *testing.T) {
  array := []interface{}{6,8,7,2,5,0,3,2}
  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].(int) {
      fmt.Println("error")
    }
    fmt.Println(*index, value)
  }
}

其他设计模式

设计模式Git源代码

00简单工厂模式

01工厂方法模式

02抽象工厂模式

03外观模式

04建造者模式

05桥接模式

06命令模式

07迭代器模式

08模板模式

09访问者模式

10备忘录模式

11责任链模式

12中介模式

13原型模式

14状态模式

15策略模式

16享元模式

17组合模式

18解释器模式

19单例模式

20适配器模式

21代理模式

22装饰器模式

23观察者模式


目录
相关文章
|
3月前
|
设计模式 Go 开发工具
Golang设计模式——12中介模式
Golang设计模式——12中介模式
26 0
|
3天前
|
设计模式 Go
[设计模式 Go实现] 行为型~迭代器模式
[设计模式 Go实现] 行为型~迭代器模式
|
15天前
|
设计模式 Java
小谈设计模式(21)—迭代器模式
小谈设计模式(21)—迭代器模式
|
1月前
|
设计模式 存储 算法
【设计模式】迭代器模式
【设计模式】迭代器模式
|
3月前
|
设计模式 Java 数据挖掘
聊聊Java设计模式-迭代器模式
迭代器(Iterator)模式,也叫做游标(Cursor)模式。我们知道,在Java 容器中,为了提高容器遍历的方便性,我们利用迭代器把遍历逻辑从不同类型的集合类中抽取出来,从而避免向外部暴露集合容器的内部结构。
44 0
聊聊Java设计模式-迭代器模式
|
3月前
|
设计模式 消息中间件 Go
Golang设计模式——23观察者模式
Golang设计模式——23观察者模式
23 0
|
3月前
|
设计模式 Go 网络安全
Golang设计模式——21代理模式
Golang设计模式——21代理模式
23 0
|
3月前
|
设计模式 Go 开发工具
Golang设计模式——19单例模式
Golang设计模式——19单例模式
26 0
|
3月前
|
设计模式 Go 开发工具
Golang设计模式——18解释器模式
Golang设计模式——18解释器模式
22 0
Golang设计模式——18解释器模式
|
3月前
|
设计模式 Go 开发工具
Golang设计模式——17组合模式
Golang设计模式——17组合模式
13 1