【问题标题】:How to implement contrary to observer pattern in java?如何在java中实现与观察者模式相反的?
【发布时间】:2012-06-23 03:26:03
【问题描述】:

在观察者模式中,观察者通常通过调用每个方法来通知侦听器,例如:

OnSomethingUpdated(Object) {
....

在这种情况下,我们有耦合:观察者应该对每个监听者做一些操作。 当我想通过继承修改 Observer 或 Listener 或尝试提取抽象超类以简化 Observer(或 Listener)的逻辑时,它很难传播消息,我收到意大利面条代码。 我认为应该存在某种方式将 Observer 工作的业务逻辑与将消息传播到侦听器的逻辑解耦。相反可能更好——听众应该检查一些消息池。 是否存在类似的模式? 谢谢。

【问题讨论】:

    标签: java design-patterns observer-pattern


    【解决方案1】:

    监听器实际上应该是一个接口:

    interface MyListener {
      void onSomethingUpdated(Object eventData);
    }
    

    这样,主体与观察者的具体实例分离;它应该保留这些接口引用的列表。

    看看here,了解如何在 Java 中实现这种模式。

    现在,为了进一步将主题与消息传播解耦,我建议您查看mediator 模式。

    【讨论】:

      【解决方案2】:

      observer pattern 中,Observer 注册 带有Observable 主题。 ObserveronSomethingUpdated() 方法由Observable 调用,它通知所有松散耦合的侦听器。有一个相关的例子here

      【讨论】:

        【解决方案3】:

        你可能不会很喜欢这个答案,但我还是要说:继承不是为了代码重用。观察者模式不应该导致紧密耦合——它应该导致脱钩!因此,如果在提取抽象基类或子类化时,您的观察者/侦听器周围出现意大利面条式代码,那是因为您不应该使用继承。

        我说了算。

        【讨论】:

          【解决方案4】:

          您可以在两者之间添加Business Delegate 或简单的外观。

          因此,观察者只会收到通知,然后将实现委托给包含业务逻辑的实际对象。这样您就可以随意更改您的业务逻辑类。

          【讨论】:

            猜你喜欢
            • 2011-12-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-12-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多