zoukankan      html  css  js  c++  java
  • DesiginPatternIterator迭代器模式

    DesiginPatternIterator迭代器模式

    聚合:数组或者链表等等

    以一个统一方式来访问内部实现不同的聚合对象

    • Iterator: 迭代器。定义遍历元素接口。
    • ConcretrIterator: 具体迭代器实现。
    • Aggretate: 聚合对象。
    • ConcreteAggrete: 聚合对象具体实现。

    定义代码

    package main
    
    import "fmt"
    
    type Iterator interface {
    	first() // 移动到第一个位置
    	next() // 移动到下一个位子
    	isDone() bool // 是否最后一个位置
    	curItem() interface{} // 返回当前
    }
    
    type ConcreteIterator struct{
    	*concreteAggregate
    	index int
    }
    
    func newConIte(a *concreteAggregate) *ConcreteIterator {
    	return &ConcreteIterator{
    		a,
    		0,
    	}
    }
    
    func (c *ConcreteIterator) first() {
    	c.index = 0
    }
    
    func (c *ConcreteIterator) next() {
    	if c.index < c.concreteAggregate.size() {
    		c.index++
    	}
    }
    
    func (c *ConcreteIterator) isDone() bool {
    	if c.index >= c.concreteAggregate.size() {
    		return true
    	}
    
    	return false
    }
    
    func (c *ConcreteIterator) curItem() interface{} {
    	return c.concreteAggregate.s[c.index]
    }
    
    type Aggregate interface {
    	createIterator() Iterator
    }
    
    type concreteAggregate struct{
    	s []string
    }
    
    func newCg(s2 []string) *concreteAggregate {
    	return &concreteAggregate{s:s2}
    }
    
    func (c *concreteAggregate) get(i int) interface{} {
    	return c.s[i]
    }
    
    
    func (c *concreteAggregate) size() int {
    	return len(c.s)
    }
    
    func (c *concreteAggregate) createIterator() Iterator {
    	return newConIte(c)
    }
    
    func main() {
    	names := []string{"张三", "李四", "王五"}
    	// 创建聚合对象
    	cg := newCg(names)
    	// 循环输出聚合对象的值
    	iterator := cg.createIterator()
    	for !iterator.isDone() {
    		fmt.Println(iterator.curItem())
    		iterator.next()
    	}
    }
    
  • 相关阅读:
    scrapy爬取相似页面及回调爬取问题(以慕课网为例)
    爬取网易云课堂、网易公开课课程数据
    用户行为数据分析笔记
    redis学习笔记
    索引原理及几种索引类型区别
    平衡二叉树,B树,B+树的概念及区别
    RF, GBDT, XGB区别
    无偏估计
    Redis分布式锁的正确实现方式
    Mybatis 你了解多少?
  • 原文地址:https://www.cnblogs.com/maomaomaoge/p/14118758.html
Copyright © 2011-2022 走看看