• <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指針出錯。
            午夜精品久久久久久久| 色成年激情久久综合| 国产成人久久久精品二区三区| 久久精品一区二区三区AV| 中文字幕无码精品亚洲资源网久久| 人妻无码久久一区二区三区免费| 久久婷婷激情综合色综合俺也去| 91亚洲国产成人久久精品网址| 亚洲一区精品伊人久久伊人| 亚洲国产精品无码久久久秋霞2| 国产99久久精品一区二区| 无码任你躁久久久久久| 午夜人妻久久久久久久久| 狠狠精品久久久无码中文字幕| 久久久久亚洲av成人网人人软件 | 国产三级精品久久| 久久亚洲精品中文字幕| 国产精品热久久毛片| 国内精品伊人久久久久777| 久久精品国产亚洲7777| 亚洲色大成网站www久久九| 久久国产免费直播| 久久久九九有精品国产| 一本久道久久综合狠狠躁AV| 久久国产精品无码网站| 久久中文字幕一区二区| 亚洲av伊人久久综合密臀性色| 国产视频久久| 91精品国产综合久久香蕉| 欧美一区二区三区久久综合| 免费久久人人爽人人爽av| 91精品国产91久久久久久蜜臀| 久久水蜜桃亚洲av无码精品麻豆| 精品国产乱码久久久久软件| 久久人人超碰精品CAOPOREN| 久久久久久国产精品美女| 狠狠色综合久久久久尤物| 国产精品丝袜久久久久久不卡| 久久免费精品视频| 亚洲伊人久久大香线蕉苏妲己| 国产91色综合久久免费|