Ric*_*ral 6 java observable observer-pattern
我刚刚开始玩Observable,Observer这是update()方法,我无法理解当不同的动作调用时我该怎么做notifyObservers().
我的意思是,我的Observable班级有几种不同的方法可以调用setChanged(),notifyObservers()最后.根据被调用的方法,需要更新UI(Swing)的某些部分.但是,该类中只update()实现了一种方法Observer.
我虽然将一些东西传递给notifyObservers()方法然后我可以检查参数,update()但它不是一个好方法来做到这一点.即使它确实如此,我应该通过什么?一个字符串,其中包含对action /方法的简短描述?一个int,就像一个动作/方法代码?别的什么?
处理这种情况的最佳方法是什么?
通常,当您接到update()时,应该从observable更新所有内容.如果这不可行,您可以将提示传递给notifyObservers().
该团伙说,观察者模式的后果之一是:
"意外更新.由于观察者不了解彼此的存在,他们可能对改变主题的最终成本视而不见.对该主题的看似无害的操作可能会导致观察者及其依赖对象的级联更新.此外,依赖性没有明确定义或维护的标准通常会导致虚假更新,这很难追查.
简单的更新协议没有提供关于主题中发生的变化的细节这一事实使这个问题更加严重.如果没有额外的协议来帮助观察者发现变化,他们可能会被迫努力推断变化.他们说:"也正在实施中
"避免观察者特定的更新协议:推送和拉取模型.观察者模式的实现通常让主题广播有关变化的附加信息.主题将此信息作为参数传递给更新.信息量可能有很大差异.
在一个极端,我们称之为推模型,主体向观察者发送有关变化的详细信息,无论他们是否愿意.另一个极端是拉模型; 除了最小的通知之外,主题只发送任何内容,观察者此后会明确询问详细信息.
拉模型强调主体对其观察者的无知,而推模型假设主体知道观察者的需求.推送模型可能会使观察者的可重用性降低,因为Subject类对Observer类进行了假设,这些假设可能并非总是如此.另一方面,拉模型可能效率低下,因为观察者类必须在没有主题帮助的情况下确定改变了什么."
| 归档时间: |
|
| 查看次数: |
4212 次 |
| 最近记录: |