我正在从Coursera的一门课程中学习设计模式。他们在课程笔记中将观察者设计模式的Subject
定义为超类,如下面的图像和代码所示
现在,我认为Subject
类本身是无用的,直到子类继承自该类并成为任何特定主题为止。在那种情况下,Subject
应该不是Java interface
吗? Subject
不是Java接口,而Observer
是Java接口的原因是什么。
是否有任何特定原因。我对此有些困惑。
谢谢
答案 0 :(得分:5)
如果Subject
是接口,则实现Subject
的每个类都必须重新实现所有的registerObserver
,unregisterObserver
和notify
方法非常标准。
您可能会说您会将这些方法放入帮助程序类中,以便每个派生的Subject
都可以将任务委派给该帮助程序。但是毕竟,您必须为所有派生的Subject
类复制委派代码。尽管委派代码简短明了,但是重复仍然令人沮丧。
您可以在鲍伯叔叔的这篇非常有趣的文章的结尾处找到该论点:http://blog.cleancoder.com/uncle-bob/2015/01/08/InterfaceConsideredHarmful.html
答案 1 :(得分:4)