2012-04-09 8 views
1

私は餌を食べるようにリアルタイムに対応する行動を取ることができるように私は私の動物が音を作る際に知っておく必要がありオブザーバー?デザインパターン

public class mammal implements Imammle 
{ 

    public String getName() { 
     return "Mammal"; 
    } 

    public String speak() { 
     return getName() + "Maaaauuu"; 
    } 

} 

を持っています。
どのようなデザインパターンを使用しますか?おかげさまで

+0

質問が明確ではないので、言い換えてください。 – Phani

+0

タイトルにあなたの質問に対する回答があります – mishadoff

答えて

3

Observerデザインパターンを使用して問題を解決できる可能性があります。 Observerパターンでは、オブジェクトの2つのタイプがあります。

  1. がオブザーバーオブジェクトは、観察可能なオブジェクトが変更するたびに通知するオブジェクトです。
  2. 観察可能オブジェクトが

オブザーバーは、彼らが見たい観察可能オブジェクトに登録されている観察者によって見ることができるオブジェクトです。 Observableオブジェクトが変更されるたびに、登録されたオブザーバのすべてを通知します。

コード例に基づいて、私はあなたがJavaを使用していると仮定します。その場合は、ObserverObservableを使用して、既存のコードに加えなければならない変更の数を減らすことができます。

public class Watcher implements java.util.Observer 
{ 
    public void update(Observable o, Object arg) { 
     System.out.println("Something has changed"); 
    } 
} 

を、それが変更されるたびに、彼らが知ることができるように、最後に、我々はmammalで私たちのウォッチャー(複数可)を登録します。

public class mammal extends java.util.Observable implements Imammle 
{ 

    public String getName() { 
     return "Mammal"; 
    } 

    public String speak() { 
     setChanged(); // We have been changed 
     notifyObservers(); // Notify everyone that we have changed 
     return getName() + "Maaaauuu"; 
    } 

} 

は、今、私たちは何かが変化したときのために見たいクラスを作成します。

public class Main 
{ 
    public static void main(String args[]) { 
     mammal cow = new mammal(); 
     Watcher farmer = new Watcher(); 
     cow.addObserver(farmer); 
     cow.speak(); 
    } 
} 

ドローバックの数は、このアプローチにあります

  1. オブザーバーは、観察可能なオブジェクトに登録することができます。 Observerがmammalを観察できるだけであることを望むかもしれません。反対側では、特定の種類のオブザーバーのみがmammalを観察できるようにすることができます。
  2. 本当にあなたのオブザーバーが正確mammalnotifyObservers(Object arg)方法
  3. またはパブリックをチェックオブザーバーを使用して観察者にメッセージのいくつかの種類に渡し
    • なしmammalで変更かを知るためにはどのような方法がありませんこれらのドローバックのいずれかがあなたのために問題がある場合は、あなたがオブザーバーと観測を避けたいとの変更に見えるかもしれmammal

に設定されたフラグ既存のクラス(mammalとあなたのオブザーバーが何であれ)を作成して、独自のアプリケーション固有のメソッドを実装します。

関連する問題