java - 如果没有观察者和主体的接口(interface),它仍然是观察者模式吗?这是一个我不确定的例子

标签 java oop design-patterns observer-pattern observers

我正在学习面向对象的设计模式,但不明白为什么如果我只有具体的监听器和主题,这不是观察者模式。在我的实践示例中,我创建了一个 DMV 办公室场景,其中包含一个名为 DmvCounter 的主题和客户(观察员)。在我的主要方法中,客户是根据他们希望 DMV 办公室为他们完成的任务构建的。

Customer bob = new Customer("Bob", "Register Vehicle", 201); // number is bob's order
Customer pat = new Customer("Pat", "Renew License", 202);
dmvObject.register(bob);
dmvObject.register(pat);

dmvObject.handleRequest(200); // nothing happens - no customer for this request number
dmvObject.handleRequest(202); // prints: "Pat says: Thank you - Renewed License"

我的问题是上面只是两个对象之间的进程间通信。没有观察者接口(interface),也没有主体接口(interface)。主题将已完成的特定订单号通知其具体客户列表。客户满意地离开 DMV 办公室。这不是观察者模式吗?

enter image description here

最佳答案

这是观察者模式的一个示例。

在典型的观察者实现中,主体维护一个依赖者列表,并通过调用每个依赖者的方法来通知这些依赖者。这就是您所描述的情况。

现在,您可以说这不是观察者模式的特别有用的实现,因为 Observable 对象不仅需要知道观察它的对象类型,还需要知道该对象的方法签名观察对象。这并不是特别可扩展,因为除了 Customer 之外,DmvCounter 无法被任何其他人观察到。

实现接口(interface)(如java.util.Observer)的好处是,您可以添加任意种类的观察者,而无需更改DmvCounter,并且所有这些都可以使用单个方法 update(Observable o, Object arg) 进行通知。

关于java - 如果没有观察者和主体的接口(interface),它仍然是观察者模式吗?这是一个我不确定的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26153675/

相关文章:

java - 将本地日期和时间转换为 UTC,然后将 UTC 转换为本地日期和时间

c++ - C++中的一种反射

java - 如何从派生类实现不需要强制转换的方法

c# - 一次性对象 : yea or nay?

java - HTTP 状态 500 - 未找到 javax.servlet.ServletException 文件

java - 让两个计时器工作并在应该的时候结束?

java - 使用 php 作为客户端和服务器应用程序之间的媒介

c++ - C++中重写虚方法

c++ - 如何在循环中访问数组对象的成员函数

ios - UICollectionView 和 MVVM