3

我有以下内容:

  1. 一个Java类:ClassA实现了Observer

  2. Java 接口:Inter(扩展 Observable,不可能)

  3. 一个Java类:ClassB实现Inter extends Observable

  4. 一个Java类:ClassC实现Inter extends Observable

现在 ClassA 的代码有点像这样。

ClassA{
    Inter anyClass = new ClassB();
           //or it could be
    Inter anyClass = new ClassC();
    //Inter.addObserver(this); //not possible since Interface cannot extend Observable
}

现在,如果某个特定事件发生在 ClassB 或 ClassC 中,我希望 ClassA 知道它。我想过使用观察者/观察者,但问题是接口不能扩展观察者。

如果有人理解这个问题,请帮助我找到在 ClassB 或 ClassC 中发生某些事情时更新 ClassA 的方法。

4

3 回答 3

5

您不必特别使用内置的 Observer/Observable java 实现。您可以创建自己的接口来使用观察者模式。

使用方法 'update' 或 'notify'(或类似的方法)创建一个接口 Observer,用于 ClassA

然后使用“Inter”接口充当 Observable 确保它实现以下内容:

- registerObserver(Observer)
- unregisterObserver(Observer)
- notifyObservers() //(or updateObservers(), which calls the update/notify method for all registered observers)

确保实现“Inter”接口的类也有一个名为observerCollection 的数组列表来跟踪观察者。然后,每当 ClassB 或 ClassC 发生变化并且您想告诉 ClassA(观察者)时,您可以调用 notifyObservers() 让它知道某些事情发生了变化。

看看这个,看看观察者设计模式会发生什么:http ://en.wikipedia.org/wiki/File:Observer.svg

于 2012-07-09T22:42:43.950 回答
2

根据第 3 和第 4 个条件,我假设 Observable 是一个类,因为 ClassB 和 ClassC 正在扩展它。那么,为什么不把 addObserver 方法放在 Observable 类中呢?然后您可以将 ClassB 或 ClassC 实例分配给 Observable anyClass 变量,并通过 addObserverMethod 注册观察者:

ClassA implements Observer {
    Observable anyClassB = new ClassB();
       //or it could be
    Observable anyClassC = new ClassC();
    anyClassB.addObserver(this);
    anyClassC.addObserver(this);
}
于 2012-07-09T22:37:01.853 回答
2

只需使用适当的方法addObserverdeleteObserver定义您自己的接口IObservable

public interface IObservable {
    void addObserver(Observer o);    
    void deleteObserver(Observer o);    
}

你的接口可以扩展这个IObservable接口:

public interface inter extends IObservable {
...
}

在您的 A 类和 B 类中,addObserverdeleteObserver方法将继承自 Observable 类,不需要定义。

public class A extends Observable implements inter {
...
}
于 2013-09-23T15:54:57.470 回答