複数のObserverが一つのオブジェクトの状態変化を監視する
監視されるクラスは複数のObserverインスタンスを保持し、Observerクラスのメソッドを使って状態変化を各Observerに通知する
Observerは監視対象のクラスオブジェクトを保持する
以下のクラス構成で確認します
クラス | 説明 |
---|---|
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));
}