迭代器(Iterator)模式 行为型模式
更新: 2023-05-24 11:11:27 字数: 0 字 时长: 0 分钟
提供一种方法来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。
c#
// 迭代器模式示例
using System;
using System.Collections;
// 定义一个迭代器接口
public interface IIterator
{
bool HasNext(); // 判断是否还有下一个元素
object Next(); // 返回下一个元素
}
// 定义一个集合接口
public interface IAggregate
{
IIterator GetIterator(); // 获取迭代器
}
// 定义一个具体的集合类
public class ConcreteAggregate : IAggregate
{
private ArrayList items = new ArrayList(); // 使用ArrayList存储元素
public IIterator GetIterator()
{
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); } // 设置指定位置的元素
}
}
// 定义一个具体的迭代器类
public class ConcreteIterator : IIterator
{
private ConcreteAggregate aggregate;
private int current = 0;
public ConcreteIterator(ConcreteAggregate aggregate)
{
this.aggregate = aggregate;
}
public bool HasNext()
{
return current < aggregate.Count; // 判断是否还有下一个元素
}
public object Next()
{
object obj = null;
if (HasNext())
{
obj = aggregate[current]; // 获取下一个元素
}
current++;
return obj;
}
}
class Program
{
static void Main(string[] args)
{
// 创建一个具体的集合对象
ConcreteAggregate aggregate = new ConcreteAggregate();
aggregate[0] = "元素1";
aggregate[1] = "元素2";
aggregate[2] = "元素3";
aggregate[3] = "元素4";
IIterator iterator = aggregate.GetIterator(); // 获取迭代器
while (iterator.HasNext())
{
Console.WriteLine(iterator.Next()); // 输出每一个元素
}
Console.ReadKey();
}
}