迭代器模式(Iterator Pattern)

未匹配的标注

迭代器模式(Iterator Pattern)是一种设计模式,它可以让我们遍历一个聚合对象的元素而无需暴露其内部实现。迭代器模式提供了一种方式来顺序访问一个聚合对象中的各个元素,而不暴露聚合对象的内部实现细节。

在 Go 语言中,可以通过定义一个 Iterator 接口来实现迭代器模式。该接口需要定义两个方法:Next 和 HasNext。Next 方法用于获取下一个元素,HasNext 方法用于判断是否还有下一个元素。接下来,我们将定义一个 Aggregate 接口和一个具体的聚合对象类型来实现迭代器模式。

package main

import "fmt"

// Iterator 迭代器接口
type Iterator interface {
    Next() interface{}
    HasNext() bool
}

// Aggregate 聚合对象接口
type Aggregate interface {
    Iterator() Iterator
}

// 具体的聚合对象类型
type Numbers struct {
    numbers []int
}

func (n *Numbers) Iterator() Iterator {
    return &NumberIterator{
        numbers: n.numbers,
        index:   0,
    }
}

// NumberIterator 数字迭代器
type NumberIterator struct {
    numbers []int
    index   int
}

func (ni *NumberIterator) Next() interface{} {
    number := ni.numbers[ni.index]
    ni.index++
    return number
}

func (ni *NumberIterator) HasNext() bool {
    if ni.index >= len(ni.numbers) {
        return false
    }
    return true
}

func main() {
    numbers := &Numbers{
        numbers: []int{1, 2, 3, 4, 5},
    }
    iterator := numbers.Iterator()

    for iterator.HasNext() {
        fmt.Println(iterator.Next())
    }
}

在上面的代码中,我们定义了一个迭代器接口 Iterator 和一个聚合对象接口 Aggregate,具体的聚合对象类型 Numbers 实现了 Aggregate 接口。Numbers 类型包含一个整数切片来存储数字,并实现了 Iterator 方法来返回一个 NumberIterator 对象。

NumberIterator 类型实现了 Iterator 接口中定义的 NextHasNext 方法,用于遍历数字切片中的元素。在 main 函数中,我们创建了一个 Numbers 对象,并使用其 Iterator 方法返回一个迭代器对象,然后使用 for 循环遍历该迭代器对象,并打印其中的元素。

通过这种方式,我们可以遍历 Numbers 对象中的所有数字,而不需要了解其内部实现细节。迭代器模式使得聚合对象的实现和遍历分离开来,从而提高了代码的可维护性和可重用性。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~