设计模式-迭代器模式
定义
迭代器模式提供了一种方法,顺序访问集合对象中的元素,而又不暴露该对象的内部实现。
将集合中遍历元素的操作抽象出来,这样符合面向对象设计原则中的单一职责原则,我们要尽可能的分离这些职责,用不同的类去承担不同的责任,避免一个类中承担太多的责任。迭代器模式就是用迭代器类来承担遍历集合元素的责任。
自己实现一个迭代器:
public interface IMyEnumerable<T>
{
IMyEnumerator<T> GetEnumerator();
}
public interface IMyEnumerator<T>
{
T Current { get; }
bool MoveNext();
}
public class MyEnumerator<T> : IMyEnumerator<T>
{
private T[] _items = null;
private int _index = -1;
public MyEnumerator(T[] items)
{
this._items = items;
}
public T Current
{
get
{
return this._items[this._index];
}
}
public bool MoveNext()
{
if (++this._index <= this._items.Length-1)
{
return true;
}
return false;
}
}
MyList:
public class MyList<T> : IMyEnumerable<T>
{
private T[] _items = null;
public MyList(T[] items)
{
this._items = items;
}
public IMyEnumerator<T> GetEnumerator()
{
return new MyEnumerator<T>(this._items);
}
}
客户端:
static void Main(string[] args)
{
MyList<int> myList = new MyList<int>(new int[] { 1, 2, 3, 4, 5, 6 });
foreach (var item in myList)
{
Console.WriteLine(item);
}
Console.ReadKey();
}
Demo2:
public class OrderCollection : IEnumerable<Order>
{
List<Order> orderList;
public OrderCollection()
{
orderList = new List<Order>() {
new Order(){ OrderCode=Guid.NewGuid(),OrderName="订单1", OrderTime=DateTime.Now},
new Order(){ OrderCode=Guid.NewGuid(),OrderName="订单2", OrderTime=DateTime.Now},
new Order(){ OrderCode=Guid.NewGuid(),OrderName="订单3", OrderTime=DateTime.Now}
};
}
public IEnumerator<Order> GetEnumerator()
{
foreach (var order in orderList)
{
yield return order;
}
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
foreach (var order in orderList)
{
yield return order;
}
}
}