观察者设计模式的主题是接口还是超class?

Subject of Observer design pattern an interface or a super class?

我正在学习 coursera 课程中的设计模式。他们有课程笔记,其中他们将观察者设计模式的 Subject 定义为超级 class,如下图和代码所示

UML

代码(主题)

现在我认为 Subject class 本身是无用的,直到子class 从它继承并创建任何特定主题。在那种情况下, Subject 不应该是 java interface 吗?为什么 Subject 不是 java 接口而 Observer

有什么具体原因吗。我对此有点困惑。

谢谢

观察者D P很简单。

  1. Subject 是 Observer 观察的实体。

  2. Subject是单一实体,Observers可以是多个。

  3. Subject 有List observers,但是Observer 会有Subject。

  4. Subject的任何变化都会通知所有观察者,Subject以列表的形式存储。

  5. 我们也可以将 Subject 作为接口。一切都取决于我们实现上述几点的方式。

如果 Subject 是一个接口,那么每个实现 Subject 的 class 都必须重新实现所有 registerObserverunregisterObservernotify 非常标准的方法。

你可能会说你会把这些方法放到一个助手 class 中,这样每个派生的 Subject 都可以将任务委托给这个助手。但毕竟,您必须为所有派生的 Subject class 复制委托代码。尽管委托代码简短明了,但重复仍然令人沮丧。

您可以在 Bob 叔叔这篇非常有趣的文章的末尾找到该论点:http://blog.cleancoder.com/uncle-bob/2015/01/08/InterfaceConsideredHarmful.html