我刚开始玩 Observable, Observer 是的 update() 方法,我不明白当不同的动作打电话时该怎么办 notifyObservers().

我的意思是,我的 Observable 课程有几种调用的方法 setChanged()notifyObservers() 到底。根据所谓的方法,需要更新UI(秋千)的某些部分。但是,只有一个 update()Observer 班级。

我把一些东西传递给 notifyObservers() 方法,然后我可以检查参数 update() 但这是做到这一点的好方法。即使这样做,我应该通过什么?一个有简短描述动作/方法的字符串? int,例如动作/方法代码?还有其他吗?

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

有帮助吗?

解决方案

总的来说,当您接到呼叫update()时,您应该从可观察到的所有内容中更新所有内容。如果这不实用,则可以通过提示通知Observers()。

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

“意外的更新。由于观察者对彼此的存在不了解,因此他们可能对改变主题的最终成本视而不见。对主题的看似无害的操作可能会导致对观察者及其依赖对象的更新。定义不明确或维护的标准通常会导致虚假更新,这可能很难追踪。

简单更新协议没有提供有关主题中发生的变化的详细信息,这一事实使这个问题加剧了。如果没有其他协议来帮助观察者发现什么变化,他们可能会被迫努力推断变化。他们说:“同样正在实施:

“避免观察者特定的更新协议:推送模型。观察者模式的实现通常会有主题广播有关更改的其他信息。主题将此信息作为参数传递给更新。信息量可能会差异很大。

在一个极端情况下,我们称之为推动模型,主题会向观察者发送有关更改的详细信息,无论他们是否想要。另一个极端是拉动模型。该受试者只会发送最小的通知,而观察者则明确要求详细信息。

拉力模型强调了对象对观察者的无知,而推动模型则假设受试者对观察者的需求有所了解。推动模型可能会使观察者不再可重复使用,因为主题类对观察者类的假设可能并非总是如此。另一方面,拉力模型可能效率低下,因为观察者类必须确定没有主题的帮助而改变的情况。 “

其他提示

第二个参数 update() 是类型 Object, ,因此您可以传递任何合适的东西。正如您指出的那样,该方法相当一般。相比之下,维持一个班级 EventListenerList 按照指定使用时可以获得一定程度的运行时类型安全性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top