using System.Collections;
namespace Test.Iterator.Structural
public static void Main()
ConcreteAggregate a = new ConcreteAggregate();
Iterator i = a.CreateIterator();
Console.WriteLine("Iterating over collection:");
public abstract class Aggregate
public abstract Iterator CreateIterator();
public class ConcreteAggregate : Aggregate
private ArrayList _items = new ArrayList();
public override Iterator CreateIterator()
return new ConcreteIterator(this);
get { return _items.Count; }
public object this[int index]
get { return _items[index]; }
set { _items.Insert(index, value); }
public abstract class Iterator
public abstract object First();
public abstract object Next();
public abstract bool IsDone();
public abstract object CurrentItem();
public class ConcreteIterator : Iterator
private ConcreteAggregate _aggregate;
private int _current = 0;
public ConcreteIterator(ConcreteAggregate aggregate)
this._aggregate = aggregate;
public override object First()
public override object Next()
if (_current < _aggregate.Count - 1)
ret = _aggregate[++_current];
public override object CurrentItem()
return _aggregate[_current];
public override bool IsDone()
return _current >= _aggregate.Count;