The links (GOF design patterns, chapters of First Design Patterns, http://www.dofactory.com/Patterns/PatternObserver.aspx ) that I read about the observer design pattern provide that a particular subject contains a link to a specific observer. Like that:
class ConcreteObserver : IObserver { ConcreteSubject concreteSubjectInstance; //other code, etc. }
Now, if a particular object itself implements the Subject interface (or is derived from some abstract Subject class), why not make the type in ConcreteObserver such an abstract / interface? I.e.
class ConcreteObserver : IObserver { ISubject concreteSubjectInstance; //other code, etc. }
Also, why not just make this field in an interface (like IObserver)?
IObserver
, , , -, , , , ?
? , .
"update()" Subject, , Observer ( ), ConcreteSubject, GetState() ( ISubject).
( ConcreteSubject) "update()".
ConcreteSubject ISubject , ConcreteSubject - (, ISubject).
, subject holds a reference to the concrete observer , .
subject holds a reference to the concrete observer
/ , /, .
, IObserver IObservable. , , , , , , .
. , . , , . , .