Java-設計模式-觀察者模式

一.介紹

觀察者模式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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容