如何在Java中的观察者更新()中执行不同的操作?
-
05-10-2019 - |
题
我刚开始玩 Observable
, Observer
是的 update()
方法,我不明白当不同的动作打电话时该怎么办 notifyObservers()
.
我的意思是,我的 Observable
课程有几种调用的方法 setChanged()
和 notifyObservers()
到底。根据所谓的方法,需要更新UI(秋千)的某些部分。但是,只有一个 update()
在 Observer
班级。
我把一些东西传递给 notifyObservers()
方法,然后我可以检查参数 update()
但这是做到这一点的好方法。即使这样做,我应该通过什么?一个有简短描述动作/方法的字符串? int,例如动作/方法代码?还有其他吗?
处理这种情况的最佳方法是什么?
解决方案
总的来说,当您接到呼叫update()时,您应该从可观察到的所有内容中更新所有内容。如果这不实用,则可以通过提示通知Observers()。
该团伙说,观察者模式的后果之一是:
“意外的更新。由于观察者对彼此的存在不了解,因此他们可能对改变主题的最终成本视而不见。对主题的看似无害的操作可能会导致对观察者及其依赖对象的更新。定义不明确或维护的标准通常会导致虚假更新,这可能很难追踪。
简单更新协议没有提供有关主题中发生的变化的详细信息,这一事实使这个问题加剧了。如果没有其他协议来帮助观察者发现什么变化,他们可能会被迫努力推断变化。他们说:“同样正在实施:
“避免观察者特定的更新协议:推送模型。观察者模式的实现通常会有主题广播有关更改的其他信息。主题将此信息作为参数传递给更新。信息量可能会差异很大。
在一个极端情况下,我们称之为推动模型,主题会向观察者发送有关更改的详细信息,无论他们是否想要。另一个极端是拉动模型。该受试者只会发送最小的通知,而观察者则明确要求详细信息。
拉力模型强调了对象对观察者的无知,而推动模型则假设受试者对观察者的需求有所了解。推动模型可能会使观察者不再可重复使用,因为主题类对观察者类的假设可能并非总是如此。另一方面,拉力模型可能效率低下,因为观察者类必须确定没有主题的帮助而改变的情况。 “
其他提示
第二个参数 update()
是类型 Object
, ,因此您可以传递任何合适的东西。正如您指出的那样,该方法相当一般。相比之下,维持一个班级 EventListenerList
按照指定使用时可以获得一定程度的运行时类型安全性。