예제코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | using System; using System.Collections; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CSharp_IteratorPattern { abstract class Aggregate { public abstract Iterator CreateIterator(); } class ConcreteAggregate : Aggregate { private ArrayList _items = new ArrayList(); public override Iterator CreateIterator() { return new ConcreteIterator(this); } public int Count { get { return _items.Count; } } public object this[int index] { get { return _items[index]; } set { _items.Insert(index, value); } } } abstract class Iterator { public abstract object First(); public abstract object Next(); public abstract bool IsDone(); public abstract object CurrentItem(); } class ConcreteIterator : Iterator { private ConcreteAggregate _aggregate; private int _current = 0; public ConcreteIterator(ConcreteAggregate aggregate) { this._aggregate = aggregate; } public override object First() { return _aggregate[0]; } public override object Next() { object ret = null; if (_current < _aggregate.Count - 1) { ret = _aggregate[++_current]; } return ret; } public override object CurrentItem() { return _aggregate[_current]; } public override bool IsDone() { return _current >= _aggregate.Count; } } class Program { static void Main(string[] args) { ConcreteAggregate a = new ConcreteAggregate(); a[0] = "Item A"; a[1] = "Item B"; a[2] = "Item C"; a[3] = "Item D"; ConcreteIterator i = new ConcreteIterator(a); Console.WriteLine("Iterating over collection:"); object item = i.First(); while (item != null) { Console.WriteLine(item); item = i.Next(); } Console.ReadKey(); } } } | cs |
'Programming > Design Pattern' 카테고리의 다른 글
[C# 디자인패턴] 제16강 옵저버 패턴 (0) | 2015.07.27 |
---|---|
[C# 디자인패턴] 제15강 미디에이터 패턴 (0) | 2015.07.24 |
[C# 디자인패턴] 제13강 커맨드패턴 (0) | 2015.07.22 |
[C# 디자인패턴] 제12강 프록시 패턴 (0) | 2015.07.21 |
[C# 디자인패턴] 제11강 퍼사드 패턴 (0) | 2015.07.20 |