Java教程

设计模式--迭代器(Iterator)模式

本文主要是介绍设计模式--迭代器(Iterator)模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

模式定义

提供一中方法顺序访问一个聚合对象中的各个元素,而又不暴露(稳定)该对象的内部表示

类图

在这里插入图片描述

要点总结

  • 迭代抽象:访问一个聚合对象的内部而无需暴露它的内部表示
  • 迭代多态:为遍历不同的集合结构提供一个统一的接口,从而支持同样的算法在不同的集合结构上进行操作
  • 迭代器的健壮性考虑:遍历的同时更改迭代器所在的集合结构,会导致问题

Go语言代码实现

工程目录

在这里插入图片描述

iterator.go

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++
   }
}

iterator_test.go

package Iterator

import (
   "fmt"
   "testing"
)

func TestArrayIterator(t *testing.T) {
   array := []interface{}{1,3,9,2,8,7}
   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]{
         fmt.Println("error")
      }
      fmt.Println(*index, value)
   }
}
这篇关于设计模式--迭代器(Iterator)模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!