0

こんにちは、Java で共有イベントを取得する方法を知りたいと思っていました。何をしたいのか説明させてください。

最初にコントローラークラスを取得しました。すべてのメソッドは静的です

クラスTrafficController {

public static void controlTraffic() {

// 何かを行う //>> このアクションが完了したことを通知したい }

}

反対側にはリスナーがいます

class TrafficListener{
public static void watchNewTraffic()
{ //新しいトラフィックが発生したときに何かを行います } }

どうすれば対処できますか

Observer と Observable があることがわかりましたが、 Observer のメソッドを実装する必要があります また、静的メソッドがあるため、私の場合は役に立たない Propertychangelistener を見つけました

4

3 に答える 3

0

staticまず、メソッドから修飾子を削除する必要がありますTrafficListener.watchNewTraffic()。そうしないと、複数のリスナーを持つことができません。さらに良いことにTrafficListener、インターフェースを作成する必要があります。

interface TrafficListener {
    void watchNewTraffic();
}

リスナーになりたい各クラスは、インターフェースを実装する必要があります。TrafficControllerその後、クラスでリスナーのコレクションを維持できます。

class TrafficController {
    private static Set<TrafficListener> listeners = new HashSet<>();

    public static void controlTraffic() {
        // do stuff
        notifyListeners();
    }

    public static void addTrafficListener(TrafficListener listener) {
        listeners.add(listener);
    }

    public static void removeTrafficListener(TrafficListener listener) {
        listeners.remove(listener);
    }

    private static void notifyListeners() {
        for (TrafficListener listener : listeners) {
            listener.watchNewTraffic();
        }
    }
}

ただし、何を達成しようとしているのかは明確ではありません。あなたの質問についての何かが、オブザーバー パターンではなくプロデューサー/コンシューマー パターンの使用を検討する必要があることを示唆しています。

于 2013-08-23T17:16:22.517 に答える
0

ここで静的メソッドを使用するのはかなり奇妙に思えます。一般的な方法は、イベントがスローされたときに呼び出されるリスナーのリストを持つことです。ただし、それにはインスタンスが必要です。

これらすべてのメソッドが静的である特定の理由はありますか? その場合、電話をかけることはそれほど悪いことwatchNewTraffic()controlTraffic()はないようです。

または、 を呼び出すリスナーを作成しますwatchNewTraffic()。テッドの例を詳しく説明します。

class StaticTrafficListener implements TrafficListener {
  public void watchNewTraffic() {
    TrafficWatcher.watchNewTraffic();  //this would be your TrafficListener which I renamed for this example to make sense ;)
  }
}
于 2013-08-23T17:17:59.800 に答える