gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:57:28 24 4
gpt4 key购买 nike

我刚开始玩 ObservableObserver 和它的 update() 方法,我不明白当不同时我应该做什么操作调用 notifyObservers()

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

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

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

最佳答案

一般来说,当您收到对 update() 的调用时,您应该更新 observable 中的所有内容。如果这不可行,您可以将提示传递给 notifyObservers()。

gang-of-book 说观察者模式的后果之一是:

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

这个问题由于简单的更新协议(protocol)没有提供主题更改内容的详细信息而变得更加严重。如果没有额外的协议(protocol)来帮助观察者发现发生了什么变化,他们可能被迫努力工作以推断出这些变化。“也在实现中,他们说:

“避免特定于观察者的更新协议(protocol):推和拉模型。观察者模式的实现通常让主题广播有关更改的附加信息。主题将此信息作为参数传递给更新。信息量可能会有所不同广泛。

在一种极端情况下,我们称之为推送模型,主体向观察者发送有关更改的详细信息,无论他们是否愿意。另一个极端是拉模型。主题只发送最基本的通知,然后观察者明确要求提供详细信息。

拉模型强调主体对其观察者一无所知,而推模型则假定主体了解其观察者的需求。推送模型可能会降低观察者的可重用性,因为 Subject 类对 Observer 类做出的假设可能并不总是正确的。另一方面,拉模型可能效率低下,因为观察者类必须在没有 Subject 帮助的情况下确定发生了什么变化。"

关于java - 如何在 Java 的 Observer 的 update() 中执行不同的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2946917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com