gpt4 book ai didi

design-patterns - 观察者设计模式 - 具体的主题和观察者

转载 作者:行者123 更新时间:2023-12-04 11:14:25 26 4
gpt4 key购买 nike

我读过的关于观察者设计模式的引用资料(GOF 设计模式、Head First Design Patterns、http://www.dofactory.com/Patterns/PatternObserver.aspx)规定具体的主题持有对具体观察者的引用。很像这样:

class ConcreteObserver : IObserver
{
ConcreteSubject concreteSubjectInstance;
//other code, etc.
}

现在,如果具体的 Subject 本身实现了一个 Subject 接口(interface)(或派生自某个抽象 Subject 类),为什么不让 ConcreteObserver 中的类型成为那个抽象/接口(interface)呢? IE。
class ConcreteObserver : IObserver
{
ISubject concreteSubjectInstance;
//other code, etc.
}

此外,为什么不把它设为(例如) IObserver 中的一个字段?界面?

最终,鉴于模式本身似乎放松了 Subject 与其 Observers 的耦合,为什么在将 Observer 与其主题耦合时似乎没有得到提升?

enter image description here

或者是吗?我只是基于我读过的例子。

最佳答案

从您的图片中,您的“update()”方法没有收到任何信息关于 Subject 的状态,所以,如果观察者需要关于这个状态的信息(就像在观察者模式中一样),那么 它必须从 ConcreteSubject 中检索它调用“GetState()”方法(ISubject 中不存在)。

此模式的替代方法是将状态(或对整个 ConcreteSubject 的引用)作为“update()”方法的参数传递。

关于引用 ConcreteSubject 而不是 ISubject 的其他一般解释可能是您可能希望与 ConcreteSubject 交互以调用业务逻辑(当然未在 ISubject 接口(interface)中公开)。

关于design-patterns - 观察者设计模式 - 具体的主题和观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6522704/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com