Observer设计模式的主题是接口还是超类?

Sye*_*mil 2 java oop uml design-patterns

我正在研究课程中的课程设计模式.他们有课程说明,他们将Subject观察者设计模式定义为超类,如下图所示

UML 在此输入图像描述

代码(主题) 在此输入图像描述

现在我认为这个Subject类本身是无用的,直到子类继承它并制作任何特定的主题.在那种情况下不应该Subject是一个java interface而不是?是什么原因Subject不是java接口而是Observeris.

是否有任何具体原因.我对此有点困惑.

谢谢

Ngh*_*Bui 5

如果Subject是一个接口,那么每一个实现类Subject必须重新实现所有的registerObserver,unregisterObservernotify方法,这是非常标准.

您可以说您将这些方法放入一个帮助器类中,以便每个派生程序Subject都可以将任务委派给该帮助程序.但毕竟,您必须复制所有派生Subject类的委托代码.虽然授权代码简短而直截了当,但重复仍然令人沮丧.

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