posts - 262,  comments - 221,  trackbacks - 0
          一、Observer模式的意圖:

          在對象的內部狀態發生變化時,自動通知外部對象進行響應。

          二、Observer模式的構成:

          ·被觀察者:內部狀態有可能被改變,而且又需要通知外部的對象

          ·觀察者:需要對內部狀態的改變做出響應的對象

          三、Observer模式的Java實現:

          Java的API中已經為我們提供了Observer模式的實現。具體由java.util.Observable類和java.util.Observer接口完成。

          前者有兩個重要的方法:

          ·setChanged:設置內部狀態為已改變

          ·notifyObservers(Object obj):通知觀察者所發生的改變,參數obj是一些改變的信息

          后者有一個核心方法:

          ·update(Object obj):相應被觀察者的改變,其中obj就是被觀察者傳遞過來的信息,該方法會在notifyObservers被調用時自動調用。

          下面是Observer模式的實現過程:

          ·創建一個被觀察者,繼承java.util.Observable

          ·創建一個觀察者,實現java.util.Observer接口

          ·注冊觀察著,調用addObserver(Observer observer)

          ·在被觀察者改變對象內部狀態的地方,調用setChanged()方法,然后調用notifyObservers(Object)方法,通知被觀察者

          ·在觀察者的update(Object)方法中,對改變做出響應。

          四、Observer模式的好處:

          1.Observer模式的優點:

             ·被觀察者只需要知道誰在觀察它,無需知道具體的觀察細節

             ·被觀察者一旦發生變化,只需要通過廣播的方式告知觀察者,至于消息如何到達則不需知道。這樣的話無疑消除了被觀察者和觀察者之間通信的硬編碼

             ·當一個被觀察者同時被多個觀察著觀察時,觀察者可以只選擇自己感興趣的事件,而忽略其它的事件
            
             ·多個觀察者組合起來可以形成一個觀察鏈,如果一旦需要回滾多個操作,此時觀察鏈可以發揮作用

             ·觀察者可以實時對被觀察對象的變化做出響應,例如自動告警、中斷運行等


          2.運用Observer模式可以

             ·屏蔽線程間的通信機制:例如兩個線程之間,主線程可以作為觀察者,執行線程是被觀察者。彼此之間只知道對方存在,但不知道之間通信的細節

             ·消除硬編碼:如果沒有Observer模式,則只能采用回調的模式,或者在代碼中顯示地調用觀察者

             ·優化異常機制:特別適合在異常發生時向頂層監控,減少try-catch代碼量



          -------------------------------------------------------------
          生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
          posted on 2008-03-07 13:55 Paul Lin 閱讀(3091) 評論(0)  編輯  收藏 所屬分類: 模式與重構
          <2008年3月>
          2425262728291
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          常用鏈接

          留言簿(21)

          隨筆分類

          隨筆檔案

          BlogJava熱點博客

          好友博客

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 镇康县| 张掖市| 鄄城县| 礼泉县| 高陵县| 丹凤县| 沙坪坝区| 余干县| 伊宁县| 泰州市| 桦川县| 宁化县| 郁南县| 遂溪县| 筠连县| 神农架林区| 玉环县| 全南县| 海安县| 娄烦县| 安龙县| 道真| 江津市| 井冈山市| 海兴县| 九龙城区| 鲁甸县| 兴国县| 西城区| 星座| 昌都县| 武穴市| 漳浦县| 平安县| 江西省| 合川市| 丹凤县| 望奎县| 汤阴县| 乡城县| 施甸县|