【发布时间】:2015-07-23 14:03:04
【问题描述】:
我目前正在使用 Java 的观察者/可观察模式,我想知道: 为什么在当前实现中需要setChanged() 方法?我知道它就在这里,所以我们只需要在治疗结束时致电notifyObservers() 一次。
这样,如果我们愿意,我们可以使用 clearChanged() 回滚任何更改。但是,我们仍然可以在我们自己的实现中进行所有检查,并且仅在我们绝对想要更新观察者时调用 notifyObservers()。
我可能遗漏了一些东西,但我不明白他们为什么不那样简化它。有什么想法吗?
【问题讨论】:
-
您问他们为什么不假设您的实现将具有某些功能,而是提供了实现所需的所有工具?
-
@dave-newton 好吧,这么说,这个问题似乎很愚蠢,当然。但是,不管你怎么做,你仍然需要检查你是否调用了 clearChanged() 。那么,为什么不满足于每次 notifyObservers() 的更新,而不是使用(看似多余的) setChanged() 标志?
-
因为您可能会在各处进行更改,但只是偶尔通知观察者?例如,在一些复杂的业务逻辑结束时,可能会或可能不会在整个多步骤流程中调用
setChanged():当它完成时,只有在任何业务逻辑步骤期间它发生了变化时,你才notifyObservers()。这样,您唯一需要做的“更改跟踪”就是致电setChanged()并在最后检查。
标签: java design-patterns observer-pattern