观察者模式 - 更新方法参数

时间:2012-12-14 23:21:22

标签: java

我正在尝试使用传递给notifyObservers方法的对象的属性,但我似乎无法找到访问它们的方法。我只能传入一个字符串,但我希望将更多选项传递给观察者。

这是设置的示例;

public class UpdateInfo {

          public String data;
          public int debug = 0;
}

public class RXTXComms extends Observable {

         UpdateInfo info = new UpdateInfo();

         public void sendToBoard(String s) {
                .......

                UpdateInfo.data = "test";
                UpdateInfo.debug = 1;
                stChanged();
                notifyObservers(info);
          }  
}

public class Program implements Observer {

     public void update(Observable obj, Object arg) {
            String msg = ""; // Message to display on GUI

            if (arg instanceof UpdateInfo) {
                 //Print out the message and Debug int onto GUI...but how do I access them from `arg`
        }
    }

}

如果我将arg的类型设为UpdateInfo,那么我会收到编译错误,我的班级Program不是抽象的....

这不是一个诚实,恰当的问题吗?

1 个答案:

答案 0 :(得分:3)

你需要施放课程。

 UpdateInfo ui = (UpdateInfo) arg;
<{1>}内的

应该可以解决问题。

Java的instanceof / Observable API设计得非常糟糕,请勿使用它。说真的 - 它不应该是一个抽象类,而是一个接口。

观察者模式非常简单,只需自己实现全类型安全。即使指定一个更好的接口版本,它实际上也没有回报。例如,各种Observer只是Java中此模式的另一个实例,执行得更好:侦听器具有方法名称和额外数据的方法,如果存在,则存在抽象Listener不止一种方法需要实现,而且通常不需要所有这些方法(参见例如Adapter)。

所以重新实现具体用例的模式,而不是针对未指定的“如果发生任何事情”的情况。模式实际上意味着重新实现,而不是从模式库中抽象地继承。