当前位置:   article > 正文

设计模式——Go语言(Golang)版:24_迭代器模式_golang 迭代一个列表需要实现哪些接口

golang 迭代一个列表需要实现哪些接口

1、介绍

提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。

迭代器模式的结构

抽象容器:一般是一个接口,提供一个iterator()方法,例如java中的Collection接口,List接口,Set接口等。
具体容器:就是抽象容器的具体实现类,比如List接口的有序列表实现ArrayList,List接口的链表实现LinkList,Set接口的哈希列表的实现HashSet等。
抽象迭代器:定义遍历元素所需要的方法,一般来说会有这么三个方法:取得第一个元素的方法first(),取得下一个元素的方法next(),判断是否遍历结束的方法isDone()(或者叫hasNext()),移出当前对象的方法remove(),
迭代器实现:实现迭代器接口中定义的方法,完成集合的迭代。

2、示例

示例代码:

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. //迭代器接口
  6. type Iterator interface {
  7. First()
  8. IsDone() bool
  9. Next() interface{}
  10. }
  11. //迭代的数据集
  12. type Aggregate interface {
  13. Iterator() Iterator
  14. }
  15. type Numbers struct {
  16. start, end int
  17. }
  18. //实现迭代器接口对应的功能
  19. type NumbersIterator struct {
  20. numbers *Numbers
  21. next int
  22. }
  23. func (i *NumbersIterator) First() {
  24. i.next = i.numbers.start
  25. }
  26. func (i *NumbersIterator) IsDone() bool {
  27. return i.next > i.numbers.end
  28. }
  29. func (i *NumbersIterator) Next() interface{} {
  30. if !i.IsDone() {
  31. next := i.next
  32. i.next++
  33. return next
  34. }
  35. return nil
  36. }
  37. func (n *Numbers) Iterator() Iterator {
  38. return &NumbersIterator{
  39. numbers: n,
  40. next: n.start,
  41. }
  42. }
  43. func NewNumbers(start,end int)*Numbers {
  44. return &Numbers{
  45. start: start,
  46. end: end,
  47. }
  48. }
  49. func IteratorPrint(i Iterator) {
  50. for i.First();!i.IsDone();{
  51. c:=i.Next()
  52. fmt.Printf("%v\n",c)
  53. }
  54. }
  55. func main() {
  56. //var aggregate Aggregate
  57. //aggregate=NewNumbers(1,10)
  58. //IteratorPrint(aggregate.Iterator())
  59. //等价于:
  60. numbers := NewNumbers(1, 10)
  61. IteratorPrint(numbers.Iterator())
  62. }

UML图:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/507440
推荐阅读
相关标签
  

闽ICP备14008679号