.NET中的集合和列表等聚合都提供了对自身进行遍历访问的迭代方法,集合实现IEnumerable接口,而迭代器实现IEnumerator接口。因为迭代器不能脱离聚合独立存在,所以其本身没有公开的构造函数,只能通过聚合创建。不同的聚合采用不同的迭代器,在IEnumerable中定义了产生迭代器的接口,即工厂方法。如下图
关于聚合:帽子和人
关于组合:头和人
实现IEnumerable接口的类,如ArrayList等集合类实现了GetEnumerator函数,即实现了工厂方法的具体实现。根据不同的类,获得不同的IEnumerator。例如,ArrayList中的GetEnumerator返回的是IEnumerator是ArrayListEnumeratorSimple,string中的GetEnumerator返回的IEnumerator是CharEnumerator:
Code
在这里,工厂方法起到了连接类层次的作用。