理解觀察者模式
當被觀察者數據發生變化了以後通知觀察者,觀察者可以做出響應的處理,這是一個一對多的過程。其實就是通知,觀察者在被觀察者那裏留一個地址,然後被觀察者可以根據所有觀察者留下的地址給他們發送通知。
java實現
自己實現這個模式也很簡單,不過java給我們提供了工具類用於線程安全的實現觀察者模式
import java.util.Observable;
public class MyObservable extends Observable {
public void pushMessage(){
// 手動調用改變方法,不然不會通知觀察者,保證併發的設計
setChanged();
// 通知觀察者
notifyObservers("消息改變了");
}
}
import java.util.Observable;
import java.util.Observer;
public class MyObserver implements Observer {
private String name;
MyObserver(String name){
this.name=name;
}
@Override
public void update(Observable o, Object arg) {
System.out.println(name+"接收到消息:"+arg);
}
}
@Test
public void test001(){
Observable observable= new MyObservable();
Observer observer= new MyObserver("張三");
Observer observer2= new MyObserver("李四");
observable.addObserver(observer);
observable.addObserver(observer2);
((MyObservable) observable).pushMessage();
}
現實考慮
現實開發基本不會有這種寫法,因爲觀察者與被觀察者之間很可能是跨系統,基本不可能是在一個jvm中存在的對象。
但是核心思想我們是可以利用的,要實現觀察者模式,或者發佈-訂閱,我們可以將觀察者列表保存在數據庫中,當被觀察者需要通知觀察者的時候去數據庫查詢要通知的觀察者,然後給他們發送消息(推送等)