1

我正在使用 Java 实现 Observer / Observable 模式。但是,我在代码的观察者部分遇到了问题。

可观察的

public class Model extends Observable {

   public void notify() {
       this.setChanged();
       this.notifyObservers(new ArrayList<A>());
       this.notifyObservers(new ArrayList<B>());
   }
}

观察者

public class View implements Observer {

    @Override
    public void update(Observable observable, Object object) {
        // TODO: If object is ArrayList<A>?
        System.out.println("A");
        // TODO: If object is ArrayList<B>?
        System.out.println("B");
    }
}

我将如何填写 TODO 注释以检查 ArrayList 上的泛型?这甚至可能吗?(如果可能的话,我宁愿在不实现更多类的情况下这样做。)

4

2 回答 2

2

您可以使用instanceof来查看您的对象是什么类型,但您正在滥用该模式。
这个想法是Observable有一个定义良好的接口,所有Observer需要知道的是使用 API 来传递通知。不应该在代码中混入
逻辑来知道究竟是什么。 从你的问题听起来对我来说,你有 2 个,他们应该让他们自己的听众对他们特别感兴趣以获取通知。没有一个结合Observable
Observable

于 2012-08-24T16:32:55.820 回答
2

一个 Observable 应该发送一种且只有一种类型的数据。

public class ModelA extends Observable {

   public void notify() {
       this.setChanged();
       this.notifyObservers(new ArrayList<A>());
   }
}

public class ModelB extends Observable {

   public void notify() {
       this.setChanged();
       this.notifyObservers(new ArrayList<B>());
   }
}

您的另一种选择是将 ArrayList<A> 和 ArrayList<B> 放入一个类中。你可以用那个类通知你的观察者。

于 2012-08-24T16:36:20.530 回答