c++ - 为什么有些方法属于主题/观察者接口(interface),而另一些方法属于主题/观察者具体子类?

标签 c++ design-patterns observer-pattern gang-of-four

来自四人帮的设计模式 enter image description here

为什么字段observers,方法AttachDetachNotify 都在接口(interface) Subject,而方法 GetStateSetState 以及字段 SubjectState 在具体子类 ConcreteSubject 中?为什么成员按原样分布在主题接口(interface)和具体子类中?

为什么方法UpdateObserver接口(interface)中,而字段subjectobserverState在具体子类中具体观察者? 为什么成员会原样分布在观察者接口(interface)和具体子类中?

主体和观察者之间似乎并不对称。 例如,为什么字段observers属于接口(interface)Subject,而字段subject属于ConcreteObserver

谢谢。

最佳答案

Subject 接口(interface)中的 GetState 和 SetState 方法将使 Subject 接口(interface)依赖于依赖对象的更新方式。这违反了依赖倒置原则。

Subject 接口(interface)所做的只是附加一个具体的主题并通知观察者。具体对象的状态如何变化与此无关。这就是为什么 getState 和 setState 不是主题接口(interface)的一部分的原因。

observeState 不是 Observer 接口(interface)的一部分的类似原因。

关于c++ - 为什么有些方法属于主题/观察者接口(interface),而另一些方法属于主题/观察者具体子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46498688/

相关文章:

c++ - 什么时候使用引用的dynamic_cast?

c++ - 如何在 Windows 键盘的物理位置上分配按键?

java - 辩论 - 从数据库层还是Java层调用Web服务?

node.js - 在 node.js 中使用递归模式循环

design-patterns - Java API观察者模式 :subject if extended

c++ - 关于多线程应用中的STL字符串异常

c++ - 如果使用多字节字符集,为什么 TCHAR 值会改变?

java - DAO 可以保存状态信息吗

java - 在 C++ 中实现观察者模式

cocoa - Cocoa 绑定(bind)如何防止更改监听器中的循环?