代码之家  ›  专栏  ›  技术社区  ›  rfgamaral

如何在Java中的观察者的UpDebug()中执行不同的操作?

  •  6
  • rfgamaral  · 技术社区  · 16 年前

    我刚开始玩 Observable , Observer 而且它的 update() 方法,我无法理解当不同的操作调用 notifyObservers() .

    我的意思是,我的 可观察的 类有几个不同的方法调用 setChanged() 和 通知观察员() 最后。根据调用的方法,需要更新UI(Swing)的某些部分。但是,只有一个 UpDead() 在中实现的方法 观察者 班级。

    我想把一些东西传给 通知观察员() 方法,然后我可以检查 UpDead() 但这并不是一个很好的方法。即使是这样,我应该通过什么?对操作/方法有简短描述的字符串?一个int,比如一个操作/方法代码?还有别的吗?

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

    2 回复  |  直到 16 年前
        1
  •  7
  •   Ray Tayek    16 年前

    一般来说,当您接到update()的调用时,应该更新Observable中的所有内容。如果这不实际,可以将提示传递给notifyobservers()。

    这帮书说,观察者模式的一个后果是:

    “意外更新。因为观察者不知道对方的存在,他们可能对改变主题的最终代价视而不见。对该主题的看似无害的操作可能会导致对观察者及其依赖对象的级联更新。此外,不定义或维护良好的依赖性标准通常会导致虚假的更新,这可能很难跟踪。

    这个问题因为简单的更新协议没有提供关于主题中发生了什么变化的细节而更加严重。如果没有额外的协议来帮助观察者发现变化,他们可能会被迫努力推断变化。 “ 他们还说,正在实施中:

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

    在一个极端,我们称之为推模型,无论观察者是否想要,主题都会向他们发送关于变更的详细信息。另一个极端是pull模型;主题只发送最少量的通知,然后观察者明确地询问细节。

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

        2
  •  3
  •   trashgod    16 年前

    的第二个参数 update() 属于类型 Object ,所以你可以通过任何合适的。正如您所注意到的,这种方法相当普遍。相反,一个类 EventListenerList 按规定使用时,可以获得一定程度的运行时类型安全性。

    推荐文章