我正在学习面向对象的设计模式,但不明白为什么如果我只有具体的监听器和主题,这不是观察者模式。在我的实践示例中,我创建了一个 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 办公室。这不是观察者模式吗?
最佳答案
这是观察者模式的一个示例。
在典型的观察者实现中,主体维护一个依赖者列表,并通过调用每个依赖者的方法来通知这些依赖者。这就是您所描述的情况。
现在,您可以说这不是观察者模式的特别有用的实现,因为 Observable 对象不仅需要知道观察它的对象类型,还需要知道该对象的方法签名观察对象。这并不是特别可扩展,因为除了 Customer
之外,DmvCounter
无法被任何其他人观察到。
实现接口(interface)(如java.util.Observer
)的好处是,您可以添加任意种类的观察者,而无需更改DmvCounter
,并且所有这些都可以使用单个方法 update(Observable o, Object arg)
进行通知。
关于java - 如果没有观察者和主体的接口(interface),它仍然是观察者模式吗?这是一个我不确定的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26153675/