首页 > 代码库 > 选代器模式
选代器模式
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/*
*/
namespace App_MYCS.HDL_SJMS.DDQMS
{
class my_DDQMS
{
public void dy()
{
ConcreteAggregate a = new ConcreteAggregate();
a[0] = "a";
a[1] = "b";
Iterator i = new ConcreteIterator(a);
object item = i.First();
while (!i.IsDone())//第一个乘客开始
{
Console.WriteLine("{0} 请买车票",i.CurrentItem());
i.Next();//下一个乘客
}
}
}
//定义得到开始对象 得到下一个对象 是否到结尾 当前对象等接口
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();//创建选代器
}
//具体的选代器类 继承Iterator
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 bool IsDone()//判断当前是否遍历到结尾,到结尾返回true
{
return current >= aggregate.Count ? true : false;
}
public override object CurrentItem()//反回当前的聚集对象
{
return aggregate[current];
}
}
//具体的聚集类 继承Aggregate
class ConcreteAggregate:aggregate
{
private IList<object> items = new List<object>();//声明一个Ilist 泛型变量
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); }
}
}
//-------------------------------------------------------------
//具体的选代器类 继承Iterator
class ConcreteIteratorDesc : Iterator
{
private ConcreteAggregate aggregate; //定义一个具体聚集对象
private int current = 0;
public ConcreteIteratorDesc(ConcreteAggregate aggregate)//初始化时将具体的聚集对象传入
{
this.aggregate = aggregate;
current = aggregate.Count - 1;
}
public override object First()//得到聚焦的第一个对象
{
return aggregate[aggregate.Count-1];
}
public override object Next()//得到聚焦的下一个对象
{
object ret = null;
current++;
if (current < aggregate.Count)
{
ret = aggregate[current];
}
return ret;
}
public override bool IsDone()//判断当前是否遍历到结尾,到结尾返回true
{
return current < 0 ? true : false;
}
public override object CurrentItem()//反回当前的聚集对象
{
return aggregate[current];
}
}
//-------------------------------------------------------------
//NET 选代器实现
interface Ieumerator
{
object Current//获取集合中的当前元素
{
get;
}
bool MoveNext();//将枚举推进到集合的下一个元素,方法返回值true表示选代器成功前进到集合的下一个元素,返回值false表示已经位于集合的末尾
void Reset();//恢复初始化指向的位置,该位置位于集合中第一个元素之前
}
interface Ienumerable
{
Ieumerator GetEnumerator();//返回一个循环访问集合的枚举数
}
}
选代器模式