请考虑下图。
在设计模式书的第294页,Applicability的第一个项目:
- 抽象有两个方面,一个依赖于另一个。将这些方面封装在单独的对象中可让您独立地改变和重用它们。
Q1:如果你想“改变并重复使用它们”,为什么要将ConcreteObserver绑定到ConcreteSubject?
不,这不是关于实施的问题。当作者设计图表时,他必须在脑海中有一个通用的面向对象的想法,我认为他们没有注意到它会导致ConcreteSubject和ConcreteObserver之间的耦合。
Q2:主题界面的目的是什么?有些书省略了它。
不,这不是关于实施的问题。我认为这是一个权衡 - 作者必须对它有一些了解,所以他决定为它创建一个接口,无论具有ConcreteSubject引用的ConcreteObserver意味着你可能根本不需要接口,因为你可以'改变它。但这只是我的意见。
对于Q1,我认为这与SOLID原则有关。 对于Q2,我认为它是统一所有具体主题的界面,但界面本身不会显示在代码中。
我需要其他观点。