Observerパターンのオブザーバー
ブロードキャストメカニズム
シーン:複数のオブザーバー-変更を通知します
文字は皆のためのマップ上の変更、更新された座標を座標移動CS
コア:ターゲットオブジェクト(件名)ステータス値が変化し、必要が迅速に対応するためにそれらを可能にするために、すべてのオブザーバ(オブザーバー)を通知します
一般的なシナリオの開発:
- チャットルームの手続き、すべてのクライアントへのサーバーに転送
- オンラインゲーム(多人数)、サーバは、各プレイヤーの状態を配布します
- Eメールサブスクリプション
-Servlet、感知機構
ブロードキャスト・メカニズム-Android
モデルを扱うAWTイベントの-jdkは、デリゲートのイベントモデルオブザーバモード(委任イベントモデル)に基づいて(イベントソース------対象オブジェクト、イベントリスナー------オブザーバー)
- Jingdongモール、量販割引情報
パブリッククラス件名{
//被观察者队伍
保護された一覧<オブザーバー>オブザーバー=新しいArrayListを<>();
公共ボイドaddObserver(観察者OBS){
observers.add(OBS)。
}
公共ボイドremoveObserver(観察者OBS){
observers.remove(OBS)。
}
//通知所有被观察者的状态更新
公共ボイドnotifyAllObserve(){
(観察者OBS:オブザーバー)のために{
obs.update()。
}
}
}
クラスConcreteSub件名{延び
プライベートINT状態を、
公共のint getStateを(){
状態を返します。
}
公共ボイドSETSTATE(INT状態){
this.state =状態。
this.notifyAllObserve();
}
}
void update();
}
class ObserverA implements Observer{
private int myState;
private Subject sub;
public ObserverA(Subject sub) {
this.sub = sub;
}
public void update() {
myState=((ConcreteSub)sub).getState();
System.out.println("状态已更新");
}
}
public static void main(String[] args) {
ConcreteSub sub=new ConcreteSub();
ObserverA obs1=new ObserverA(sub);
ObserverA obs2=new ObserverA(sub);
ObserverA obs3=new ObserverA(sub);
//添加到被观察者队伍
sub.addObserver(obs1);
sub.addObserver(obs2);
sub.addObserver(obs3);
sub.setState(1000);
}
}
private int state;
public void set(int s) {
state=s;
setChanged();
this.notifyObservers();
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
}
private int myState;
@Override
public void update(Observable o, Object arg) {
myState=((ConcreteSubject)o).getState();
}
public int getMyState() {
return myState;
}
public void setMyState(int myState) {
this.myState = myState;
}
public static void main(String[] args) {
ConcreteSubject cs=new ConcreteSubject();
ObserverA obs1=new ObserverA();
ObserverA obs2=new ObserverA();
ObserverA obs3=new ObserverA();
//添加至队伍中
cs.addObserver(obs1);
cs.addObserver(obs2);
cs.addObserver(obs3);
cs.set(100);
System.out.println(obs1.getMyState());
System.out.println(obs2.getMyState());
System.out.println(obs2.getMyState());
}
}