• <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 閱讀(397) 評論(0)  編輯 收藏 引用 所屬分類: 設(shè)計模式

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


            創(chuàng)建兩個基類: Informer (被觀察類) 和 Observer (觀察類)。
            在Informer 里面有一個Observer對象的列表, 當(dāng)Informer的狀態(tài)發(fā)生改變時,調(diào)用notify()方法,該方法的作用是遍歷Observer列表,并調(diào)用它們的 update(Informer*) 方法,使得該Informer對象對應(yīng)的所有Observer對象都進(jìn)行更新。當(dāng)我們有一個類B要觀察類A的時候,就把
            B 和 A 分別繼承于 Observer 和 Informer 。這樣,當(dāng)A的屬性發(fā)生變化時,調(diào)用notify()方法,就可以調(diào)用到B的update()方法,從而達(dá)到通知的效果。
             
            注意:
                  假設(shè)update()里面有個 Informer*  pInfo的參數(shù),不要為了方便,把pInfo 轉(zhuǎn)換成 Informer 的子類的指針,否則很容易使pInfo指針出錯。
            亚洲国产美女精品久久久久∴ | 久久久精品一区二区三区| 亚洲国产成人精品女人久久久 | 久久国产高清字幕中文| 国产午夜精品久久久久免费视 | 天天综合久久久网| 一本久久久久久久| 日本免费一区二区久久人人澡| 久久久久人妻精品一区| 国产精品9999久久久久| 久久91亚洲人成电影网站| 久久这里只有精品久久| 国产精品亚洲美女久久久| 久久精品国产亚洲Aⅴ蜜臀色欲| 99久久亚洲综合精品网站| 久久精品亚洲福利| 国产精品美女久久福利网站| 亚洲熟妇无码另类久久久| 国产精品久久久久久| 精品无码人妻久久久久久| 亚洲人成网站999久久久综合| 99久久精品免费看国产一区二区三区 | 中文字幕成人精品久久不卡| 老司机午夜网站国内精品久久久久久久久 | 99久久精品国产麻豆| 久久久久久久综合综合狠狠| 久久婷婷人人澡人人爽人人爱| 久久精品中文无码资源站| 久久国产精品偷99| 亚洲级αV无码毛片久久精品| 四虎国产精品免费久久久| 伊人久久大香线蕉综合网站| 日韩精品久久久肉伦网站| 国内精品久久久久久久亚洲| 亚洲日本va中文字幕久久| 94久久国产乱子伦精品免费| 免费精品久久天干天干| 国产真实乱对白精彩久久| 激情伊人五月天久久综合| 四虎影视久久久免费| 91亚洲国产成人久久精品|