0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Observer Pattern

Last updated at Posted at 2020-11-14

複数のObserverが一つのオブジェクトの状態変化を監視する
監視されるクラスは複数のObserverインスタンスを保持し、Observerクラスのメソッドを使って状態変化を各Observerに通知する
Observerは監視対象のクラスオブジェクトを保持する

Design Pattarm MENU

以下のクラス構成で確認します

クラス 説明
Mediator.class 各Observerクラスが監視するオブジェクト
各ObserverクラスのインスタンスをListに格納
Listにインスタンスがadd()されたら、全ObserverにListのsizeを通知する
abstract
Observer.class
監視対象のMediatorインスタンスを保持する
Mediatorが利用するメソッドを実装
ob1.class~ob2.class Observerを実装
user(Main.class) 動作確認

*user 他の開発者がこのパターンを利用する、という意味合いを含みます

Mediator.class
class Mediator{
  List list = new ArrayList<Observer>();
  void add(Observer obsvr){
       list.add(obsvr);
       notifyTo(list.size());  // Listが更新されたらnotifyTo()を実行
  }
  void notifyTo(int size){
       Iterator it = list.iterator();
       while(it.hasNext()){
         Observer ob = (Observer) it.next();
         ob.update(size);      // Listに格納した各Observerクラスのupdate()を使って通知
       }
  }
}
abstract_Oberver.class
abstract  class Observer{
     Mediator mediator = null;
     int      mediatorListSize = 0;
     Observer(Mediator med){this.mediator=med;}
     void update(int size){
          mediatorListSize=size;
          System.out.println(
             mediatorListSize+":"+mediator.list.size()
          );
      }
}
ob1.class_ob2.class
class ob1 extends Observer{ob1(Mediator med){super(med);}}
class ob2 extends Observer{ob2(Mediator med){super(med);}}
user(Main.class)
public static void main(String[] args){
  Mediator md = new Mediator();
  md.add(new ob1(md));
  md.add(new ob2(md));
}
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?