一.介紹
觀察者模式Observer(又稱為發布publish-訂閱Subscribe模式、模型-視圖模式、源-收聽者模式或從屬者模式)是軟件設計模式的一種!
完美將觀察者和被觀察對象分離,定義了對象間的一對多依賴關系,
一個對象(被觀察者)狀態發生變化時, 所有對象(觀察者)都得到通知并自動刷新!
例如UI可作為觀察者, 業務數據是被觀察者,數據發生變化, 通知UI更新。
實現觀察者模式時要注意,觀察者和被觀察對象之間互動關系不能體現成類之間直接調用,
否則就將使觀察者和被觀察對象之間緊密的耦合起來,從根本上違反面向對象的設計原則。
無論是觀察者“觀察”觀察對象,還是被觀察者將自己的改變“通知”觀察者,都不應該直接調用!
面向對象設計一個原則:一個對象(類)只做一件事情,不管其它!
觀察者模式在模塊之間劃定了清晰界限,提高了應用程序的可維護性和重用性。
二.使用
java標準已經有:觀察者接口Observer,被觀察者抽象類Observable
所以Java使用觀察者模式很方便快捷!
1.添加觀察者(注冊/訂閱)
void 添加觀察者(){
Observable o = new 被觀察者();
o.addObserver(new 觀察者A());
o.addObserver(new 觀察者B());
}
2.觀察者
public class 觀察者A implements Observer {
// 被觀察者改變了,通知觀察者A
@Override
public void update(Observable o, Object arg) {
}
}
public class 觀察者B implements Observer {
// 被觀察者改變了,通知觀察者B
@Override
public void update(Observable o, Object arg) {
}
}
3.被觀察者
public class 被觀察者 extends Observable {
// Observable.addObserver()添加觀察者,保存了所有觀察者
void 被觀察者改變了(){
setChanged();
// 循環遍歷所有觀察者對象,調用update(...),通知所有觀察者
notifyObservers();
}
}
簡書: http://www.lxweimin.com/p/1e4bf0b7f744
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/72792614
GitHub博客:http://lioil.win/2017/05/28/Observer_Pattern.html
Coding博客:http://c.lioil.win/2017/02/28/Observer_Pattern.html