迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,且不用暴露该对象的内部表示。迭代器模式又称为游标模式。
迭代器模式的结构
Iterator(抽象迭代器):定义访问遍历元素的接口,声明便利元素的方法
public interface Iterator
{
void First();
void Next();
void HasNext();
void CurrentIterm();
}
ConcreteIterator(具体迭代器):实现抽象迭代器接口,完成对聚合对象的遍历,同时在具体迭代器通过游标来记录在聚合对象中所处的当前位置。
class ConcreteIterator : Iterator
{
private int index = 1;
private Aggregate aggregate;
public ConcreteIterator(Aggregate aggregate)
{
this.aggregate = aggregate;
}
public void First()
{
//第一个元素
if (aggregate.list.Count > 0)
{
Console.WriteLine(aggregate.list[0].ToString());
}
else
{
Console.WriteLine("没有任何元素");
}
}
public void Next()
{
//下一个元素
if (aggregate.list.Count > index)
{
index++;
Console.WriteLine(aggregate.list[index - 1].ToString());
}
else
{
Console.WriteLine("没有任何元素");
}
}
public void HasNext()
{
//是否有下一个元素
if (aggregate.list.Count > index)
{
Console.WriteLine(aggregate.list[index - 1].ToString());
}
else
{
Console.WriteLine("没有任何元素");
}
}
public void CurrentIterm()
{
//当前元素
Console.WriteLine(aggregate.list[index - 1].ToString());
}
}
Aggregate(抽象聚合类):它用于存储和管理元素对象。创建一个迭代器对象
interface Aggregate
{
List<object> list { get; set; }
Iterator CreateLterator();
}
ConreteAggregate(具体聚合类):抽象聚合类的子类,实现抽象聚合类。
class ConcreteAggregate : Aggregate
{
public List<object> list { get; set; }
public ConcreteAggregate(List<object> list)
{
this.list = list;
}
public Iterator CreateLterator()
{
return new ConcreteIterator(this);
}
}
调用
List<object> str = new List<object>()
{
1,
2,
3,
4
};
//聚合
Aggregate aggregate = new ConcreteAggregate(str);
//迭代器
Iterator iterator = new ConcreteIterator(aggregate);
//当前
iterator.CurrentIterm();
//下一个
iterator.Next();