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

时间:2018-11-10 13:53:06

标签: java oop design-patterns uml

我正在从Coursera的一门课程中学习设计模式。他们在课程笔记中将观察者设计模式的Subject定义为超类,如下面的图像和代码所示

UML enter image description here

代码(主题) enter image description here

现在,我认为Subject类本身是无用的,直到子类继承自该类并成为任何特定主题为止。在那种情况下,Subject应该不是Java interface吗? Subject不是Java接口,而Observer是Java接口的原因是什么。

是否有任何特定原因。我对此有些困惑。

谢谢

2 个答案:

答案 0 :(得分:5)

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

您可能会说您会将这些方法放入帮助程序类中,以便每个派生的Subject都可以将任务委派给该帮助程序。但是毕竟,您必须为所有派生的Subject类复制委派代码。尽管委派代码简短明了,但是重复仍然令人沮丧。

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

答案 1 :(得分:4)

观察者D P很简单。

  1. 主题是观察者监视的实体。

  2. 主题是单个实体,观察者可以是多个。

  3. 主题具有列表观察者,但观察者将具有主题。

  4. 主题的任何更改都将通知所有观察者,主题以列表形式存储。

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

enter image description here