Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Design Patterns via C#.pdf
Скачиваний:
154
Добавлен:
17.03.2016
Размер:
13.25 Mб
Скачать

206

Структура паттерна на языке C#

Классическое представление

class Program

{

static void Main()

{

Aggregate a = new ConcreteAggregate();

a[0] = "Element A"; a[1] = "Element B"; a[2] = "Element C"; a[3] = "Element D";

Iterator i = a.CreateIterator();

for (object e = i.First(); !i.IsDone(); e = i.Next()) Console.WriteLine(e);

}

}

abstract class Aggregate

{

public abstract Iterator CreateIterator(); public abstract int Count { get; }

public abstract object this[int index]

{

get; set;

}

}

abstract class Iterator

{

public abstract object First(); public abstract object Next(); public abstract bool IsDone();

public abstract object CurrentItem();

}

class ConcreteIterator : Iterator

{

private Aggregate aggregate; private int current = 0;

public ConcreteIterator(Aggregate aggregate)

{

this.aggregate = aggregate;

}

class ConcreteAggregate : Aggregate

{

private ArrayList items = new ArrayList();

public override Iterator CreateIterator()

{

return new ConcreteIterator(this);

}

public override int Count

{

get { return items.Count; }

}

public override object this[int index]

{

get { return items[index]; }

set { items.Insert(index, value); }

}

}

public override object First()

{

return aggregate[0];

}

public override object Next()

{

if (current++ < aggregate.Count - 1) return aggregate[current];

else

return null;

}

public override object CurrentItem()

{

return aggregate[current];

}

public override bool IsDone()

{

if (current < aggregate.Count) return false;

current = 0; return true;

}

}

См. Пример к главе: \016_Iterator\001_Iterator

207

Представление Microsoft .NET

class Program

 

 

 

{

 

 

 

static void Main()

 

 

 

{

 

 

 

Enumerable enumerable = new Enumerable();

 

 

enumerable[0]

= "Element A";

 

 

enumerable[1]

= "Element B";

 

 

enumerable[2]

= "Element C";

 

 

enumerable[3]

= "Element D";

 

 

foreach (var item in enumerable)

 

 

{

 

 

 

Console.WriteLine(item);

 

 

}

 

 

 

}

 

 

 

}

 

 

 

interface IEnumerable

interface IEnumerator

 

 

{

{

 

 

IEnumerator GetEnumerator();

bool MoveNext();

 

 

}

void Reset();

 

 

 

object Current { get; }

 

 

 

}

 

 

class Enumerable : IEnumerable

class Enumerator : IEnumerator

 

 

 

 

 

{

{

 

 

 

 

 

private ArrayList items = new ArrayList();

private Enumerable enumerable;

 

 

 

 

 

 

private int current = -1;

 

 

public object this[int index]

 

 

 

{

public Enumerator(Enumerable enumerable)

 

get { return items[index]; }

{

 

 

 

 

 

set { items.Insert(index, value); }

this.enumerable = enumerable;

 

 

 

 

 

}

}

 

 

 

 

 

public int Count

// Реализация интерфейса IEnumerator.

 

 

 

{

public bool MoveNext()

 

 

 

 

 

get { return items.Count; }

{

 

 

 

 

 

}

if(current < enumerable.Count

- 1)

 

 

 

 

{

 

 

// Реализация интерфейса IEnumerable.

current++;

 

 

 

 

 

public IEnumerator GetEnumerator()

return true;

 

 

 

 

 

{

}

 

 

 

 

 

return new Enumerator(this);

return false;

 

 

 

 

 

}

}

 

 

 

 

 

}

 

 

 

 

public void Reset()

 

 

 

{

 

 

 

current = -1;

 

 

 

}

 

 

 

public object Current

 

 

 

{

 

 

 

get { return enumerable[current];

}

 

}

 

 

 

}

 

 

См. Пример к главе: \016_Iterator\003_Enumerator

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]