java設計模式十五(觀察者模式)
阿新 • • 發佈:2019-01-03
java設計模式—觀察者模式
一.概述
在物件之間定義了一對多的依賴,這樣一來,當一個物件改變狀態,依賴它的物件會收到通知並自動更新。這有點像我們的maven,比如maven的pom.xml刪除某個依賴包時,eclipse裡的程式碼就會做出相應的錯誤提示。
二.應用場景
1.微信公眾號服務,釋出訊息時,關注公眾號就可以收到推送訊息
2.微博的訂閱,當我們訂閱了某個人的微博賬號,當這個人釋出了新的訊息,就會通知我們
3.訂閱火車票之後,需要記錄日誌,也需要傳送簡訊
4.事件訊息
三.模式示例:
1.建立被觀察者類
public class ObservableDemo extends Observable{
private String message = "";
public ObservableDemo(){ }
public String getMessage(){
return message;
}
public void setMessage(String message){
if(!this.message.equals(message)){
this.message = message;
setChanged(); //標註已經被更改
this.notifyObservers(message); //通知觀察者資料已被更改
}
}
}
2.建立觀察者類
public class ObserverDemo implements Observer{
private String observerName;
public ObserverDemo(String observerName) {
this.observerName = observerName;
}
@Override
public void update(Observable o, Object arg) {
if(o instanceof ObservableDemo){
System.out.println(observerName + "新訊息:"+arg);
}
}
}
3.模式呼叫
public class Test {
public static void main(String args[]){
ObservableDemo observableDemo=new ObservableDemo();
ObserverDemo A = new ObserverDemo("A");
ObserverDemo B = new ObserverDemo("B");
ObserverDemo C = new ObserverDemo("C");
observableDemo.addObserver(A);
observableDemo.addObserver(B);
observableDemo.addObserver(C);
observableDemo.addObserver(new Observer(){
@Override
public void update(Observable o, Object arg) {
System.out.println("new Observer");
}
});
observableDemo.setMessage("nihao1");
observableDemo.setMessage("nihao1");
}
}