Java観察者モードの例


観察者モードは挙動設計モードである。観察者モードの用途は,オブジェクトの状態に興味があるときは,その都度変化があるときに通知してほしい。観察者モードでは、もう一つの対象の状態を観察する対象をObserver観察者といい、観察対象はSubject観察者と呼ばれています。
観察者モードObserver
 観察者モードは、複数の観察者オブジェクトが同時にある主題オブジェクトを傍受するように、一対の複数の依存関係を定義する。
このテーマのオブジェクトが状態に変化した場合、すべての観察者に、自動的に自分自身を更新することができるように通知します。
観察者モードの構成
抽象的なテーマの役割:すべての観察者の対象に対する引用を一つのセットに保存し、それぞれの抽象的なテーマの役割は任意の数の観察者を持つことができます。抽象的なテ-マはインタフェースを提供して,観察者の役を増加して削除することができます。一般的に抽象的なクラスとインターフェースで実現されます。
抽象的な観察者の役割:すべての具体的な観察者のためにインタフェースを定義し、テーマの通知を得る時に自分を更新する。
具体的なテーマキャラクター:具体的なテーマの内部状態が変わる時、登録した観察者全員に通知します。具体的なテーマのキャラクターは一つのサブクラスで実現されます。
 具体的な観察者の役割:この役は抽象的な観察者の役の要求の更新のインターフェースを実現して、自分の状態とテーマの状態を調和させます。普通は一つのサブクラスで実現します。必要ならば、具体的な観察者の役割は具体的なテーマの役割を指す引用を保存することができます。
プログラムの例
観察者モードは、プログラムの例によって説明される。
まず抽象的な観察者を定義します。

//       
public interface Watcher
{
  public void update(String str);
} 
抽象的なテーマキャラクター、すなわち抽象的な被観察者を定義し、その中で宣言方法(観察者を追加、削除し、観察者に通知する):

//      ,watched:   
public interface Watched
{
  public void addWatcher(Watcher watcher);
  public void removeWatcher(Watcher watcher);
  public void notifyWatchers(String str);
} 
そして、具体的な観察者を定義する。

public class ConcreteWatcher implements Watcher
{
  @Override
  public void update(String str)
  {
    System.out.println(str);
  }
} 
次は具体的なテーマのキャラクターです。

import java.util.ArrayList;
import java.util.List;
public class ConcreteWatched implements Watched
{
  //      
  private List<Watcher> list = new ArrayList<Watcher>();
  @Override
  public void addWatcher(Watcher watcher)
  {
    list.add(watcher);
  }
  @Override
  public void removeWatcher(Watcher watcher)
  {
    list.remove(watcher);
  }
  @Override
  public void notifyWatchers(String str)
  {
    //                
    for (Watcher watcher : list)
    {
      watcher.update(str);
    }
  }
} 
試験種別の作成:

public class Test
{
  public static void main(String[] args)
  {
    Watched girl = new ConcreteWatched();
    Watcher watcher1 = new ConcreteWatcher();
    Watcher watcher2 = new ConcreteWatcher();
    Watcher watcher3 = new ConcreteWatcher();
    girl.addWatcher(watcher1);
    girl.addWatcher(watcher2);
    girl.addWatcher(watcher3);
    girl.notifyWatchers("  ");
  }
}
以上は小编が皆さんに分かち合うJava観察者モードの例です。