2009-03-29 1 views
1

私は特定の条件を監視するエージェントを持っています。各条件について、その条件の責任はオブザーバーにあるので、別のオブザーバーに通知したいと思います。多くのタイプのオブザーバパターンを実装する最良の方法は何ですか?

WikiPediaによると、C++の単一のオブザーバー/サブジェクトのための方法は、オブザーバーの更新メソッドを定義する仮想クラス(仮想クラスに似ています)を作成し、件名のそれぞれの具象クラスはそれぞれのインタフェースを継承します。

しかし、これは、任意の数の条件に対して発生することを想像することができます。それぞれの条件は、新しい条件ごとに別のインターフェイスと具体的なオブザーバクラスを必要とします。デザインの種類は意味がありますか?新しい条件ごとにオブザーバー・インターフェースを追加することは合理的ですか?

答えて

3

あなたはJavaはGUIコンポーネント(正確に同じではないが、同じ一般的な考え方)のイベントを扱う鍬し、これを比較すると、あなたのような何かをする羽目になる:

public void addActionListener(ActionListener listener) { } 
public void addWindowListener(WindowListener listener) { } 
public void addComponentListener(ComponentListener listener) {} 
public void addMouseListener(MouseListner listener) {} 

*リスナーのすべて物事はインターフェイスです。次に、インターフェイスを実装する1つまたは複数のクラスを提供します(リスナータイプごとに1つのクラスを優先し、他のクラスはすべてのリスナーを実装する単一クラスを優先します)。これは、物事は彼らだけが興味を持っているイベントを登録することができますので、非常に柔軟であることが証明さ

代替は、リスナーインタフェースが一つ一つの可能​​なイベントがあり、単一の「のaddListener(リスナーリスナー)」方法であり、あなたが気にしていない出来事について通知されていることで大丈夫でない限り、それは悪い考えです。

だから、あなたが聞くことができる細かい制御を望んでいると思いますか?そうであれば、Javaモデルはうまく動作します(どちらも気にしないとうまくいきますが、非常に柔軟です)。すべてがすべてのイベントを通知されることを望むと思う場合は、単一の「マスター」方法も有効です。

きめ細かい制御が必要なように聞こえるので、イベントの一般的なカテゴリごとにJavaイベントの方法を使っても問題ありません。

+0

これはWindowsイベントモデルと非常によく似ています。考えてみましょう。 –

関連する問題