迭代器模式(Iterator Pattern)是一种行为型设计模式,用于提供一种顺序访问聚合对象中各个元素的方法,而无需暴露其内部表示。它定义了一种访问聚合对象元素的统一接口,使得可以在不暴露聚合对象内部结构的情况下,按顺序访问聚合对象中的元素。
迭代器模式在以下情景中可以得到有效的应用:
迭代器模式适用于需要遍历一个聚合对象的场景,并且希望在遍历时能够封装遍历算法,以及在未来能够灵活地扩展和修改遍历方式的情况。
下面是一个简单的迭代器模式的示例,其中包括一个具体聚合类MyList和一个具体迭代器类ListIterator。
package main
import "fmt"
// Iterator Interface
type Iterator interface {
HasNext() bool
Next() string
}
// Aggregate Interface
type List interface {
CreateIterator() Iterator
}
// ConcreteIterator
type ListIterator struct {
list []string
index int
}
func NewListIterator(list []string) *ListIterator {
return &ListIterator{list: list, index: 0}
}
func (li *ListIterator) HasNext() bool {
return li.index < len(li.list)
}
func (li *ListIterator) Next() string {
if li.HasNext() {
value := li.list[li.index]
li.index++
return value
}
return ""
}
// ConcreteAggregate
type MyList struct {
elements []string
}
func NewMyList() *MyList {
return &MyList{elements: make([]string, 0)}
}
func (ml *MyList) AddElement(element string) {
ml.elements = append(ml.elements, element)
}
func (ml *MyList) CreateIterator() Iterator {
return NewListIterator(ml.elements)
}
// Client
func main() {
myList := NewMyList()
myList.AddElement("Item 1")
myList.AddElement("Item 2")
myList.AddElement("Item 3")
iterator := myList.CreateIterator()
for iterator.HasNext() {
fmt.Println(iterator.Next())
}
}在这个例子中,Iterator是迭代器接口,List是聚合接口,而ListIterator是具体迭代器实现。MyList是具体聚合实现。客户端通过迭代器访问MyList中的元素,而不需要了解MyList的内部结构。
我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
blog: mengbin
Github: mengbin92
cnblogs: 恋水无意
腾讯云开发者社区:孟斯特
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。