1

オブザーバー パターンでは、オブザーバーは通常、次のようなメソッドを呼び出すことによってリスナーに通知します。

OnSomethingUpdated(Object) {
....

この場合、カップリングがあります。オブザーバーは各リスナーに対して何らかの操作を行う必要があります。継承によって Observer または Listener を変更したい場合や、Observer (または Listener) のロジックを単純化するために抽象スーパークラスを抽出しようとすると、メッセージの伝達が難しくなり、スパゲッティ コードを受け取ります。オブザーバーの作業のビジネス ロジックを、メッセージをリスナーに伝達するロジックから切り離す何らかの方法が存在する必要があると思います。逆に良いかもしれません-リスナーはメッセージのプールをチェックする必要があります。似たようなパターンはありますか?ありがとう。

4

4 に答える 4

3

リスナーは実際にはインターフェースである必要があります。

interface MyListener {
  void onSomethingUpdated(Object eventData);
}

このようにして、サブジェクトはオブザーバーの具体的なインスタンスから分離されます。これらのインターフェース参照のリストを保持する必要があります。

Java でこのパターンを実装する方法については、こちらをご覧ください。

ここで、件名をメッセージの伝播からさらに分離するために、メディエーターパターンを確認することをお勧めします。

于 2012-06-23T10:07:50.953 に答える
1

オブザーバー パターンでは、aがサブジェクトにObserver 登録さObservableれます。のonSomethingUpdated()メソッドはObserverによって呼び出され、Observableすべての疎結合リスナーに通知します。ここに関連する例があります。

オブザーバーパターン

于 2012-06-23T03:43:19.720 に答える
1

おそらくこの答えはあまり気に入らないでしょうが、とにかく言います。継承はコードの再利用のためのものではありません。オブザーバー パターンは密結合につながるべきではありません。デカップリングにつながるはずです。したがって、抽象基本クラスを抽出したりサブクラス化したりするときに、オブザーバー/リスナーの周りにスパゲッティ コードになってしまう場合は、継承を使用してはならないためです。

そこで、言いました。

于 2012-06-23T03:55:09.713 に答える
0

ビジネスデリゲートを中間に追加するか、単純なファサードを追加できます。

したがって、オブザーバーは通知を受け取るだけで、実装をビジネス ロジックを含む実際のオブジェクトに委譲します。このようにして、ビジネス ロジック クラスを自由に変更できます。

于 2012-06-23T03:34:54.357 に答える