我阅读的关于观察者设计模式的参考资料 (GOF设计模式、Head First设计模式、http://www.dofactory.com/Patterns/PatternObserver.aspx) 都指出具体主题应该持有对具体观察者的引用。就像这样:
class ConcreteObserver : IObserver
{
ConcreteSubject concreteSubjectInstance;
//other code, etc.
}
现在,如果具体的主题本身实现了一个主题接口(或者继承自某个抽象主题类),为什么不让ConcreteObserver中的类型成为该抽象/接口呢?即:
class ConcreteObserver : IObserver
{
ISubject concreteSubjectInstance;
//other code, etc.
}
此外,为什么不将其作为(例如)
IObserver
接口中的一个字段呢?最终,鉴于该模式似乎放松了Subject与其Observers之间的耦合,为什么在将Observer与其subject耦合时似乎并未得到推广?
但是真的是这样吗?我只是基于我所读到的例子进行推断。