概述
迭代器模式也是一种行为型的设计模式,主要是提供一种迭代数据的方法,可以使用户不知道内部结构的实现情况下遍历所有的元素,其主要组成部分是,迭代器接口,迭代器,集合接口,集合类,用户在使用的时候创建一个集合类,然后把数据加入到其中,就可以使用迭代器类来遍历所有的元素
例子:在不适用for foreach等方法的情况下遍历集合。
迭代器模式
using static POC;
using System.Numerics;
internal class Program
{
private static void Main(string[] args)
{
// 创建集合并添加元素
Aggregate<string> aggregate = new Aggregate<string>();
aggregate.Add("Apple");
aggregate.Add("banana");
aggregate.Add("peach");
// 获取迭代器并遍历集合
IIterator<string> iterator = aggregate.CreateIterator();
while (iterator.HasNext())
{
string item = iterator.Next();
Console.WriteLine(item);
}
}
public interface IIterator<T>//迭代器接口
{
bool HasNext();
T Next();
}
public interface IAggregate<T>//集合接口
{
IIterator<T> CreateIterator();
}
public class Iterator<T> : IIterator<T>//迭代器类
{
private readonly Aggregate<T> _aggregater;
private int _index;
public Iterator(Aggregate<T> aggregater)
{
_aggregater = aggregater;
_index = 0;
}
public bool HasNext()
{
return _index < _aggregater.Count;
}
public T Next()
{
return _aggregater[_index++];
}
}
public class Aggregate<T> : IAggregate<T>//集合类
{
private readonly List<T> _items = new List<T>();
public int Count => _items.Count;
public T this[int index]
{
set => _items[index] = value;
get => _items[index];
}
public void Add(T item)
{
_items.Add(item);
}
public void Remove(T item)
{
_items.Remove(item);
}
public IIterator<T> CreateIterator()
{
return new Iterator<T>(this);
}
}
}
输出结果:
Apple
banana
peach