迭代器模式
迭代器模式(Iterator Pattern): 提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示.
优点 和 缺点
优点:
- 它支持以不同的方式遍历一个聚合对象
- 迭代器简化了聚合类
缺点:
- 增加了类的个数,这在一定程度上增加了系统的复杂性
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| type Iterator interface { Next() interface{} HasNext() bool }
type ConcreteIterator struct { index int size int con Aggregate }
func (c *ConcreteIterator) HasNext() bool { return c.index < c.size }
func (c *ConcreteIterator) Next() interface{} { if c.HasNext() { res := c.con.GetElement(c.index) c.index++ return res } return nil }
type Aggregate interface { Add(obj interface{}) CreateIterator() Iterator GetElement(index int) interface{} Size() int }
type ConcreteAggregate struct { docker []interface{} }
func (c *ConcreteAggregate) Size() int { return len(c.docker) }
func (c *ConcreteAggregate) Add(obj interface{}) { c.docker = append(c.docker,obj) }
func (c *ConcreteAggregate) CreateIterator() Iterator { return &ConcreteIterator{ index: 0, size: c.Size(), con: c, } }
func (c *ConcreteAggregate) GetElement(index int) interface{} { return c.docker[index] }
|