迭代器模式是一种行为型设计模式,它允许客户端遍历一种容器(如列表或数组)中的元素,并访问容器中的每个元素,而无需关心容器的内部实现。迭代器模式属性于单一职责原则,因为它将遍历和容器分离开来。
使用迭代器模式,客户端可以遍历容器中的元素,而无需了解容器的内部数据结构。这使得可以轻松添加或删除容器的元素的方式,而无需修改客户端代码。此外,迭代器模式还使客户端代码更加简洁,因为迭代器封装了遍历过程。
以下是一个简单的使用迭代器模式的C#示例:
代码语言:javascript复制using System;
using System.Collections.Generic;
// 抽象迭代器
interface IIterator<T>
{
T First();
T Next();
bool IsDone();
T CurrentItem();
}
// 具体迭代器
class ConcreteIterator<T> : IIterator<T>
{
private ConcreteAggregate<T> _aggregate;
private int _current = 0;
public ConcreteIterator(ConcreteAggregate<T> aggregate)
{
_aggregate = aggregate;
}
public T First()
{
return _aggregate[0];
}
public T Next()
{
T ret = default(T);
if (_current < _aggregate.Count - 1)
{
ret = _aggregate[ _current];
}
return ret;
}
public bool IsDone()
{
return _current >= _aggregate.Count;
}
public T CurrentItem()
{
return _aggregate[_current];
}
}
// 抽象聚合类
interface IAggregate<T>
{
IIterator<T> CreateIterator();
}
// 具体聚合类
class ConcreteAggregate<T> : IAggregate<T>
{
List<T> items = new List<T>();
public IIterator<T> CreateIterator()
{
return new ConcreteIterator<T>(this);
}
public int Count
{
get
{
return items.Count;
}
}
public void Add(T item)
{
items.Add(item);
}
public T this[int index]
{
get
{
return items[index];
}
}
}
class Program
{
static void Main()
{
// 创建聚合对象
var aggregate = new ConcreteAggregate<int>();
// 添加元素
aggregate.Add(1);
aggregate.Add(2);
aggregate.Add(3);
aggregate.Add(4);
aggregate.Add(5);
// 获取迭代器
var iterator = aggregate.CreateIterator();
// 遍历容器中的元素
Console.WriteLine("Iterating over collection:");
for (var item = iterator.First(); !iterator.IsDone(); item = iterator.Next())
{
Console.WriteLine(item);
}
}
}
在此示例中,我们首先定义了一个抽象迭代器接口和一个具体迭代器类,以支持在容器中遍历元素。然后,我们定义了一个抽象聚合类和一个具体聚合类,以封装要遍历的容器。我们通过在具体聚合类中实现CreateIterator方法来获取Iterator对象。
在Main方法中,我们创建ConcreteAggregate实例,添加元素,然后使用CreateIterator方法创建一个具体迭代器对象。最后,我们使用迭代器遍历容器中的元素并将它们打印到控制台上。