Java 观察者设计模式的主题是接口还是超类?
我在coursera学习设计模式课程。他们有课程笔记,其中他们将观察者设计模式的Java 观察者设计模式的主题是接口还是超类?,java,oop,design-patterns,uml,Java,Oop,Design Patterns,Uml,我在coursera学习设计模式课程。他们有课程笔记,其中他们将观察者设计模式的主题定义为超类,如下图和代码所示 UML 代码(主题) 现在我认为Subject类本身是无用的,除非子类继承它并生成任何特定的Subject。在这种情况下,主题不应该是java接口吗?为什么主题不是java接口,而是观察者呢 有什么具体的原因吗。我对此有点困惑 谢谢观察员D p是一个简单的例子 主体是观察者观察的实体 主体是单个实体,观察者可以是多个 主体拥有观察者列表,但观察者将拥有主体 受试者的任何变更都将以
主题定义为超类,如下图和代码所示
UML
代码(主题)
现在我认为Subject
类本身是无用的,除非子类继承它并生成任何特定的Subject。在这种情况下,主题不应该是java接口吗?为什么主题
不是java接口,而是观察者
呢
有什么具体的原因吗。我对此有点困惑
谢谢观察员D p是一个简单的例子
主体是观察者观察的实体
主体是单个实体,观察者可以是多个
主体拥有观察者列表,但观察者将拥有主体
受试者的任何变更都将以列表的形式通知所有观察者
我们也可以将主题作为接口。这一切都取决于我们实现上述几点的方式
如果Subject
是一个接口,那么实现Subject
的每个类都必须重新实现所有非常标准的registerObserver
、unregisterObserver
和notify
方法
您可以说,您将把这些方法放入一个helper类中,这样每个派生的主题
都可以将任务委托给这个helper。但毕竟,您必须为所有派生的Subject
类复制委托代码。尽管授权代码简短明了,但这种重复仍然令人沮丧
你可以在Bob叔叔这篇非常有趣的文章的结尾处找到这个论点:我认为Subject类本身是无用的,直到一个子类从它继承并生成任何特定的Subject-为什么是这样?@user7因为它除了附加和分离观察者并保留一个最终被删除的观察者列表之外还有什么其他作用当我们从subject继承时,子类将出现在子类中,换句话说,子类在继承后有相同的代码,并且有自己的附加代码,所以如果subject是一个接口,而类实现了该功能,这不是相同的吗?谢谢,我想你是对的。只要所有的观点都成立,实现可能会有所不同。谢谢,这是一篇有趣的文章,回答了许多其他令人沮丧的问题。他的观点到底是什么,被认为是有害的?他是说接口不好吗?因为接口是部分解决或缓解“不支持多重继承”问题的变通方法。接口不是坏的,但是由于它的发明,语言设计者没有以更正确的方式解决问题,所以我们不需要接口,只是抽象类是好的,像C++。