微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我刚刚开始使用Observable,Observer和它的update()方法,当不同的动作调用notifyObservers()时,我无法理解我该怎么做.

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

我虽然将一些东西传递给notifyObservers()方法,然后我可以检查update()上的参数,但它不是一个方法.即使它确实如此,我应该通过什么?一个字符串,其中包含对action /方法的简短描述?一个int,就像一个动作/方法代码?别的什么?

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

解决方法

通常,当您接到update()时,应该从observable更新所有内容.如果这不可行,您可以将提示传递给notifyObservers().

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

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

简单的更新协议没有提供关于主题中发生的变化的细节这一事实使这个问题更加严重.如果没有额外的协议来帮助观察者发现变化,他们可能会被迫努力推断变化.

他们还表示:

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

一个极端,我们称之为推模型,主体向观察者发送有关变化的详细信息,无论他们是否愿意.另一个极端是拉模型;除了最小的通知之外,主题只发送任何内容,观察者此后会明确询问详细信息.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐