• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Observer(觀察者)模式

            Posted on 2008-05-16 02:38 Herbert 閱讀(385) 評論(0)  編輯 收藏 引用 所屬分類: 設計模式

              Observer (觀察者)模式就是指一個被觀察對象對應多個觀察對象,當這個被觀察對象狀態改變時可以立即通知所有依賴于該對象的觀察對象。
            舉個例子:
                  假如我要設計一個按鈕響應事件,當我按下按鈕時,在另外一個地方有個標簽上顯示“已經按了”。
                  最直接的想法是在按鈕類Button 里面創建一個標簽類的指針(如: Label* m_pLabel), 當按鈕按下時, 在按鈕的響應事件里面調用 m_pLabel, 使得它顯示 “已經按了”。
                  但這種做法只能局限于具體的兩個類:Button 和 Label, 如果我要Button 通知 Button或者其它類,則要再添加一個指向其它類的指針,這樣顯得很不整潔。觀察模式就可以解決這個問題,如下圖所示:


            創建兩個基類: Informer (被觀察類) 和 Observer (觀察類)。
            在Informer 里面有一個Observer對象的列表, 當Informer的狀態發生改變時,調用notify()方法,該方法的作用是遍歷Observer列表,并調用它們的 update(Informer*) 方法,使得該Informer對象對應的所有Observer對象都進行更新。當我們有一個類B要觀察類A的時候,就把
            B 和 A 分別繼承于 Observer 和 Informer 。這樣,當A的屬性發生變化時,調用notify()方法,就可以調用到B的update()方法,從而達到通知的效果。
             
            注意:
                  假設update()里面有個 Informer*  pInfo的參數,不要為了方便,把pInfo 轉換成 Informer 的子類的指針,否則很容易使pInfo指針出錯。
            精品无码久久久久久午夜| 国产 亚洲 欧美 另类 久久| 国产精品久久久久久久久久影院| 国内精品久久久久久中文字幕| 久久国产免费直播| 久久人人爽人人爽人人爽| 777午夜精品久久av蜜臀| 久久99精品久久久久久动态图 | 久久WWW免费人成—看片| 久久国产精品免费一区| 伊人久久大香线蕉av不卡| 久久er国产精品免费观看2| 亚洲精品WWW久久久久久| 久久99国产综合精品| 久久影院亚洲一区| 久久精品国产免费一区| 久久久久久精品免费看SSS| 国产福利电影一区二区三区久久久久成人精品综合 | 中文精品久久久久国产网址| 亚洲一区精品伊人久久伊人| 国产美女久久精品香蕉69| 久久亚洲欧洲国产综合| 久久国产精品-国产精品| 久久精品国产99久久久古代| 97久久精品人人澡人人爽| 无码八A片人妻少妇久久| 国产午夜精品久久久久九九电影 | 女人香蕉久久**毛片精品| 久久99久久99精品免视看动漫| 久久免费精品视频| a高清免费毛片久久| 久久夜色精品国产噜噜亚洲AV| 一级a性色生活片久久无少妇一级婬片免费放 | 久久国产成人午夜AV影院| 久久综合给合久久狠狠狠97色69| 香蕉99久久国产综合精品宅男自| 国产精品热久久无码av| 国产精品gz久久久| 久久久久久久亚洲精品| 久久国产精品无码网站| 欧美久久亚洲精品|