提供一种方法顺序访问聚合对象中的各个元素,而不暴露其内部表示。
// 迭代器接口 public interface IIterator<T> { bool HasNext(); T Next(); } // 聚合接口 public interface IAggregate<T> { IIterator<T> CreateIterator(); } // 具体聚合类 public class MyCollection<T> : IAggregate<T> { private readonly List<T> _items = new List<T>(); public void Add(T item) => _items.Add(item); public T Get(int index) => _items[index]; public int Count => _items.Count; public IIterator<T> CreateIterator() { return new MyIterator<T>(this); } } // 具体迭代器类 public class MyIterator<T> : IIterator<T> { private readonly MyCollection<T> _collection; private int _index = 0; public MyIterator(MyCollection<T> collection) => _collection = collection; public bool HasNext() => _index < _collection.Count; public T Next() => _collection.Get(_index++); } // 调用示例 public static void TestIterator() { var collection = new MyCollection<string>(); collection.Add("A"); collection.Add("B"); collection.Add("C"); var iterator = collection.CreateIterator(); while (iterator.HasNext()) { Console.WriteLine("元素: " + iterator.Next()); } }