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

230

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

Модель вытягивания (Pull model)

class Program { static void Main() { ConcreteSubject subject = new ConcreteSubject(); subject.Attach(new ConcreteObserver(subject)); subject.Attach(new ConcreteObserver(subject)); subject.State = "Some State ..."; subject.Notify(); } }

abstract class Subject

 

 

{

 

 

ArrayList observers = new ArrayList();

 

public void Attach(Observer observer)

 

 

{

 

 

observers.Add(observer);

 

 

}

 

 

 

 

abstract class Observer

public void Detach(Observer observer)

 

{

{

 

public abstract void Update();

observers.Remove(observer);

 

}

}

 

 

public void Notify()

 

 

{

 

 

foreach (Observer observer in observers)

 

observer.Update();

 

class ConcreteObserver : Observer

}

 

{

}

 

string observerState;

 

 

ConcreteSubject subject;

 

 

public ConcreteObserver(ConcreteSubject subject)

 

 

{

 

 

this.subject = subject;

class ConcreteSubject : Subject

 

}

 

 

{

 

public override void Update()

public string State { get; set;

}

{

}

 

 

observerState = subject.State;

 

 

 

 

}

 

 

}

См. Пример к главе: \019_Observer\001_Observer [project ObserverPull]

231

Модель проталкивания (Push model)

 

class Program

 

 

{

 

 

 

static void Main()

 

{

 

 

 

ConcreteSubject subject = new ConcreteSubject();

 

subject.Attach(new ConcreteObserver(subject));

 

subject.Attach(new ConcreteObserver(subject));

 

subject.State

= "Some State ...";

 

subject.Notify();

 

}

 

 

 

}

 

 

abstract class Subject

 

 

 

{

 

 

 

ArrayList observers = new ArrayList();

 

 

public void Attach(Observer observer)

 

 

{

 

 

 

observers.Add(observer);

 

 

 

}

 

 

 

public void Detach(Observer observer)

 

 

{

 

 

abstract class Observer

 

 

 

observers.Remove(observer);

 

{

 

 

}

 

 

public abstract void Update(string state);

 

 

 

 

 

 

}

public override string State

{ get; set;

}

 

public void Notify()

 

 

 

{

 

 

 

foreach (Observer observer in observers)

class ConcreteObserver : Observer

observer.Update(State);

 

 

{

}

 

 

 

 

string observerState;

}

 

 

 

 

ConcreteSubject subject;

 

 

 

 

 

 

public ConcreteObserver(ConcreteSubject subject)

 

 

 

{

 

 

 

this.subject = subject;

class ConcreteSubject : Subject

 

 

}

 

 

 

{

 

 

public override void Update(string state)

public override string State

{ get; set;

}

{

}

 

 

 

 

observerState = state;

 

 

 

 

 

 

}

 

 

 

}

См. Пример к главе: \019_Observer\001_Observer [project ObserverPush]

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