Jam*_*man 7 design-patterns observer-pattern
我读过关于观察者设计模式的参考文献(GOF设计模式,头部设计模式,http://www.dofactory.com/Patterns/PatternObserver.aspx)规定了具体主题对具体观察者的参考.很像这样:
class ConcreteObserver : IObserver
{
ConcreteSubject concreteSubjectInstance;
//other code, etc.
}
Run Code Online (Sandbox Code Playgroud)
现在,如果具体的Subject本身实现了一个Subject接口(或派生自一些抽象的Subject类),为什么不让ConcreteObserver中的类型成为那个抽象/接口?即
class ConcreteObserver : IObserver
{
ISubject concreteSubjectInstance;
//other code, etc.
}
Run Code Online (Sandbox Code Playgroud)
而且,为什么不把它作为(例如)IObserver界面中的一个字段呢?
最终,鉴于模式本身似乎放松了主体与其观察者的耦合,为什么在将观察者与其主体耦合时,这似乎不会得到提升?

或者是吗?我只是基于我读过的例子.
从您的图片中,您的"update()"方法不会收到有关Subject的状态的任何信息,因此,如果Observer需要有关此状态的信息(通常在观察者模式中),那么它必须从ConcreteSubject中检索它调用"GetState()"方法(不存在于ISubject中).
此模式的替代方法是将状态(或对整个ConcreteSubject的引用)作为"update()"方法的参数传递.
对ConcreteSubject而不是ISubject的引用的其他一般解释可能是您可能希望与ConcreteSubject交互以调用业务逻辑(当然不在ISubject接口中公开).