如何在Java的Observer的update()中执行不同的操作?

如何在Java的Observer的update()中执行不同的操作?

问题描述:

我刚刚开始玩Observable,Observer和它的update()方法,我不明白我应该怎么做,当不同的动作调用notifyObservers()如何在Java的Observer的update()中执行不同的操作?

我的意思是,我的Observable类有几种不同的方法,最后调用setChanged()notifyObservers()。根据被调用的方法,UI的某些部分(Swing)需要更新。但是,在Observer类中只有一个update()方法。

我虽然将某些东西传递给notifyObservers()方法,然后我可以检查update()上的参数,但它不觉得这是一个好方法。即使它有,我应该通过什么?一个带有动作/方法简短描述的字符串?一个int,就像一个动作/方法代码一样?还有别的吗?

处理这种情况的最佳方法是什么?

一般来说,当你调用update()时,你应该更新可观测值的所有内容。如果这不切实际,可以将提示传递给notifyObservers()。

该团伙的,书上说的观察者模式的后果之一是:

”意外的更新,因为观察者没有彼此的存在的知识,他们可以无视变化的最终成本在这个问题上看似无害的操作可能会导致对观察者及其依赖对象的级联更新,而且,没有明确定义或维护的依赖关系标准通常会导致虚假更新,这很难追查到。

此问题由于简单更新协议没有提供有关主题中更改内容的细节而变得更加严重。没有附加协议t o帮助观察员发现变化,他们可能会*努力推导出变化。 “ ” 也在执行中,他们说:

“避免观察者特定的更新协议:推和拉模型。观察者模式的实现通常会让主题广播关于变化的附加信息。主题将此信息作为参数传递给Update。信息量可能差别很大。

在我们称之为推模型的一个极端中,主体向观察者发送关于变化的详细信息,无论他们是否需要。另一个极端是拉模型;该主题只发送最少量的通知,观察人员此后明确要求详细信息。

拉动模式强调主体对观察者的无知,而推动模式则假设主体知道他们的观察者的需求。推式模型可能会使观察者的可重用性降低,因为Subject类对Observer类进行了假设,而这些假设可能并非总是如此。另一方面,拉模型可能效率低下,因为观察者类必须确定没有来自主题的帮助而改变了什么。 “

update()的第二个参数类型为Object,因此您可以传递任何适当的参数。正如你所看到的,这种方法相当普遍。相比之下,维护EventListenerList的类在按规定使用时可以获得一定程度的运行时类型安全性。