3

私は次のものを持っています:

  1. Javaクラス:ClassAはObserverを実装します

  2. Javaインターフェイス:Inter(Observableを拡張しますが、不可能です)

  3. Javaクラス:ClassBはInterextendsObservableを実装します

  4. Javaクラス:ClassCはInterextendsObservableを実装します

これで、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にそのことを知らせたいと思います。Observer / Observableを使用することを考えましたが、問題は、インターフェイスがObservableを拡張できないことです。

誰かが質問を理解している場合は、ClassBまたはClassCで何かが発生したときにClassAを更新する方法を見つけるのを手伝ってください。

4

3 に答える 3

5

組み込みの Observer/Observable Java 実装を特に使用する必要はありません。オブザーバー パターンを使用する独自のインターフェイスを作成できます。

ClassA に使用されるメソッド 'update' または 'notify' (またはそのようなもの) を使用して、インターフェイス Observer を作成します。

次に、「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 の条件により、ClassB と ClassC がそれを拡張しているため、Observable はクラスであると想定します。では、 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

適切なメソッドaddObserverおよびdeleteObserverを使用して、独自のインターフェイスIObservableを定義するだけです。

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

インターフェイスは、このIObservableインターフェイスを拡張できます。

public interface inter extends IObservable {
...
}

クラス A および B では、addObserverおよびdeleteObserverメソッドは Observable クラスから継承されるため、定義する必要はありません。

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