迭代器模式

迭代器模式(Iterator Pattern): 提供一种方法,顺序访问一个集合对象中的各个元素,而又不暴露该对象的内部表示。

适用场景

  • 访问一个集合对象的内容,而无需暴露它的内部表示。

  • 为遍历不同的集合结构提供了一个统一的接口。

优点

  • 分离了集合对象的遍历行为

缺点

  • 类的个数成对增加,新增一个集合类,就需要相对应地增加一个迭代器类

迭代器模式在实际使用过程中是经常使用的一种设计模式,但是在实际编程过程中,很少有我们自己去实现一个迭代器,因为编程语言一般就给我们提供了相应集合类的迭代器。

Golang Demo

下面的示例并不能完全地表示迭代模式,建议参考java版示例。因为没有add和remove方法。实际使用中,我们并不需要亲自来实现,因为了解就可以。

package iterator

type Student struct {
    name string
}

type Iters []Student

func (i Iters) Iterator() *Iterator {

    return &Iterator{
        data:  i,
        index: 0,
    }

}

type Iterator struct {
    data  Iters
    index int
}

func (i *Iterator) HasNext() bool {
    return i.index < len(i.data)
}

func (i *Iterator) Next() (v Student) {
    v = i.data[i.index]
    i.index++
    return v
}

Java Demo

UML

迭代器模式UML

补充另一个版本的Java/Scala Demo 以及源码解析

Java Demo_

Scala Demo

UML_

源码解析

Last updated