为什么ConcreteObserver在Observer模式中保存对ConcreteSubject的引用?

问题描述 投票:1回答:1

请考虑下图。

问题:

在设计模式书的第294页,Applicability的第一个项目:

  • 抽象有两个方面,一个依赖于另一个。将这些方面封装在单独的对象中可让您独立地改变和重用它们。

Q1:如果你想“改变并重复使用它们”,为什么要将ConcreteObserver绑定到ConcreteSubject?

不,这不是关于实施的问题。当作者设计图表时,他必须在脑海中有一个通用的面向对象的想法,我认为他们没有注意到它会导致ConcreteSubject和ConcreteObserver之间的耦合。

Q2:主题界面的目的是什么?有些书省略了它。

不,这不是关于实施的问题。我认为这是一个权衡 - 作者必须对它有一些了解,所以他决定为它创建一个接口,无论具有ConcreteSubject引用的ConcreteObserver意味着你可能根本不需要接口,因为你可以'改变它。但这只是我的意见。

对于Q1,我认为这与SOLID原则有关。 对于Q2,我认为它是统一所有具体主题的界面,但界面本身不会显示在代码中。

我需要其他观点。

UML of Observer

design-patterns observer-pattern
1个回答
1
投票
  1. 我相信,“改变和重复使用它们”,应该说你可以改变观察者并重用主题。反过来没有意义。第296页与图表相矛盾。 您可以重复使用主题而无需重复使用观察者,反之亦然。 显然,当直接依赖于具体实现时,您无法在没有主题的情况下重用观察者。
  2. 代码重用似乎是主题抽象最明显的目的;但是我也可以想象一个应用程序上下文将bean连接在一起,其中不同的具体主题是无关紧要的(可能是因为观察者想要通知所有数据更改,第297页:“观察多个主题。”)在观察者维护的情况下对其主题的引用和注册本身,主题抽象可能没有必要。
© www.soinside.com 2019 - 2024. All rights reserved.