Head First 设计模式 10-迭代器模式
迭代器模式 提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。
书中示例是用 Java 写的,需要用到 java.util.Iterator
接口,C# 中对应的是 IEnumerator
接口,不过方法名稍有区别。
csharp
public interface IEnumerator
{
object Current { get; }
bool MoveNext();
void Reset();
}
C# 若要自定义类型支持 foreach
关键字(Java 中对应的是 for/in 语法),需要继承 IEnumerable<T>
或 IEnumerable
接口,通过其 GetEnumerator
方法获取继承 IEnumerator
的类的实例。
csharp
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
自定义迭代器的类图如下:
C# 中继承了 IEnumerable<T>
或 IEnumerable
的所有类,都可以通过 GetEnumerator()
方法(Java 中对应的是 iterator()
方法)获取迭代器。下面是一个简单的示例:
csharp
var arr = new List<string>() { "1", "3", "2" };
var enumerator = arr.GetEnumerator();
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Current);
}
设计原则
No.9 单一职责
一个类应该只有一个引起变化的原因。
这个原则告诉我们,尽量让每个类保持单一职责。
区分设计中的责任,是最困难的事情之一。