迭代器模式
来源:互联网 发布:gcr.io 阿里云 编辑:程序博客网 时间:2024/06/08 03:56
大概可以理解为,左边是存储好的元素,右边是迭代器,用于访问这些元素。
左边的类需要右边的构造函数来生成右边的具体迭代器对象,所以具体Aggregate类依赖于具体迭代器类。同时具体迭代器类访问元素需要在类里面定义一个具体Aggregate对象,所以他们之间有关联关系,且箭头指向具体Aggregate类。
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 迭代器模式{ abstract class Iterator { public abstract object First(); public abstract object Next(); public abstract bool IsDone(); public abstract object CurrentItem(); } abstract class Aggregate { public abstract Iterator CreateIterator(); } class ConcreteAggregate : Aggregate { private IList<object> items = new List<object>(); public override Iterator CreateIterator() { return new ConcreteIterator(this); } public int Count { get { return items.Count; } } public object this[int index] { get { return items[index]; } set { items.Insert(index, value); } } } class ConcreteIterator : Iterator { private ConcreteAggregate aggregate; private int current = 0; public ConcreteIterator(ConcreteAggregate aggregate) { this.aggregate = aggregate; } public override object First() { return aggregate[0]; } public override object Next() { object ret = null; current++; if (current < aggregate.Count) { ret = aggregate[current]; } return ret; } public override object CurrentItem() { return aggregate[current]; } public override bool IsDone() { return current >= aggregate.Count ? true : false; } } class Program { static void Main(string[] args) { ConcreteAggregate ret = new ConcreteAggregate(); ret[0] = 1; ret[1] = "second"; ret[2] = 333; Iterator lst = ret.CreateIterator(); Console.WriteLine(lst.First()); Console.WriteLine(lst.CurrentItem()); Console.WriteLine(lst.Next()); Console.WriteLine(lst.CurrentItem()); Console.WriteLine(lst.IsDone()); Console.WriteLine(lst.Next()); Console.WriteLine(lst.IsDone()); Console.WriteLine(lst.Next()); Console.WriteLine(lst.IsDone()); } }}
阅读全文
0 0
- 行为模式-迭代器模式
- 设计模式-迭代器模式
- 设计模式 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 【设计模式】迭代器模式
- 设计模式-迭代器模式
- 设计模式- 迭代器模式
- 设计模式 - 迭代器模式
- 设计模式:迭代器模式
- 行为模式-迭代器模式
- 设计模式 - 迭代器模式
- 设计模式-迭代器模式
- 设计模式--迭代器模式
- 设计模式---迭代器模式
- 设计模式---迭代器模式
- 【设计模式】迭代器模式
- 设计模式 迭代器模式
- EXT2文件系统笔记之ext2_fill_super
- HDU 1560 迭代加深 解题报告
- ACM整数性问题(nefu115和hdu2099)
- POJ1125 Floyd
- 滕王阁序---王勃
- 迭代器模式
- hdu 1576 A/B 求逆元模板题
- Android应用开发-学生信息管理系统
- C++中#define中的#与##作用和区别
- 测试sklearn包中常用的机器学习算法
- 本地eclipse连接外网Hadoop
- 关于C#中的内存理解
- SQL 常用语法一
- PHP学习笔记——each()函数的特性