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 |
using System; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { ConcreateAggregate book = new ConcreateAggregate(10); book.add("アルジャーノンに花束を"); book.add("ライ麦畑でつかまえて"); } } /* Iterator 実際の集合体が自身のインスタンスを渡した、具体的な反復子のインスタンスを生成する。 */ interface Aggregate //Iteratorオブジェクト生成のインターフェース { Iterator iterator(); } interface Iterator //走査のインターフェース。 { object Next(); //HasNextなど必要なインターフェースを定義する。 } class ConcreateAggregate : Aggregate //実際の集合体。 { //集合体を保持する。 private string[] items; int last = 0; public ConcreateAggregate(int max) { this.items = new string[max]; } public void add(string item) { items[last] = item; last++; } public Iterator iterator() { //実際の集合体が返すのは具体的な反復子のインスタンス return new ConcreateIterator(this); } public string GetItemAt(int index) { return items[index]; } } class ConcreateIterator: Iterator //具体的な反復子 { //カレント要素の記憶。 int index; public ConcreateIterator() { index = 0; } //実際の集合体のインスタンス保持。 private ConcreateAggregate ConcreateAggregate; public ConcreateIterator(ConcreateAggregate c) { this.ConcreateAggregate = c; } public object Next() { return ConcreateAggregate.GetItemAt(index++); } } } |