09.04.2016 Views

Priemioop

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Паттерны поведения<br />

и наблюдателя, без множественного наследования. Так, в Smalltalk интерфейсы<br />

Sub j ect и Observer определены в корневом классе Obj ect и потому доступны<br />

вообще всем классам.<br />

Пример кода<br />

Интерфейс наблюдателя определен в абстрактном классе Observer:<br />

class Subject;<br />

class Observer {<br />

public:<br />

virtual -Observer ();<br />

virtual void Update (Subject* theChangedSubject) = 0;<br />

protected:<br />

Observer ( ) ,-<br />

};<br />

При такой реализации поддерживается несколько субъектов для одного наблюдателя.<br />

Передача субъекта параметром операции Update позволяет наблюдателю<br />

определить, какой из наблюдаемых им субъектов изменился.<br />

Таким же образом в абстрактном классе Subject определен интерфейс<br />

субъекта:<br />

class Subject {<br />

public:<br />

virtual -Subject()<br />

virtual void Attach(Observer*);<br />

virtual void Detach(Observer*);<br />

virtual void Notify();<br />

protected:<br />

Subject();<br />

private:<br />

List *_observers;<br />

};<br />

void Subject::Attach (Observer* o) {<br />

_observers->Append(o);<br />

}<br />

void Subject::Detach (Observer* o) {<br />

_observers->Remove(o);<br />

}<br />

void Subject::Notify () {<br />

Listlterator i(„observers);<br />

}<br />

for (i.First (); !i.IsDone() ; i.NextO) {<br />

i.Currentltemf)->Update(this);<br />

}

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!