Java接口可观测(Java Interface Observable)

2019-09-19 06:21发布

我有以下几点:

  1. 一个Java类:ClassA的实现观察员

  2. Java接口:国际米兰(延长观察的,是不可能的)

  3. 一个Java类:ClassB的实现国际扩展可观测

  4. 一个Java类:ClassC实现国际扩展可观测

现在对于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的了解它。 我想使用观察者/可观察的,但问题是,接口不能延长观测。

如果有人理解的问题,请帮我找到一个方法来更新ClassA的东西时,ClassB中或ClassC发生。

Answer 1:

你不明确必须使用内置的观察者/可观察的Java实现。 你可以创建自己的接口使用观察者模式。

创建与将被用于ClassA的方法“更新”或“通知”(或类似的东西)的界面观察

然后使用“内部”接口作为可观察确保它实现了以下内容:

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

使实现了“国米接口确保类也有一个名为observerCollection一个ArrayList跟踪观察员。 然后每次东西ClassB的或ClassC改变,你要告诉ClassA的(观察者),你可以才调用notifyObservers(),让它知道事情已经改变。

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



Answer 2:

由图3分4的条件我假定可观察是一类,因为ClassB的和ClassC正在扩展它。 那么,为什么不把可观察类的addObserver方法? 然后,你可以指定ClassB的或ClassC实例可观察anyClass变量,并通过addObserverMethod注册观察者:

ClassA implements Observer {
    Observable anyClassB = new ClassB();
       //or it could be
    Observable anyClassC = new ClassC();
    anyClassB.addObserver(this);
    anyClassC.addObserver(this);
}


Answer 3:

简单地定义自己的接口的IObservable与占有方法的addObserverdeleteObserver:

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

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

public interface inter extends IObservable {
...
}

在你的类A和B的的addObserverdeleteObserver方法会从可观察类被继承和不需要定义。

public class A extends Observable implements inter {
...
}


文章来源: Java Interface Observable