• <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>

            eryar

            PipeCAD - Plant Piping Design Software.
            RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
            posts - 603, comments - 590, trackbacks - 0, articles - 0

            觀察者模式與MFC的Document/View

            Posted on 2012-06-09 15:52 eryar 閱讀(1841) 評論(0)  編輯 收藏 引用

            Observer Pattern and the Document/View of MFC

            觀察者模式與MFC的Document/View

            一、觀察者概述

            觀察者模式是對象行為模式,用來定義對象間的一種一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更新。通常用于將一個系統(tǒng)分割成一系列相互協(xié)作的類有一個常見的副作用:需要維護(hù)相關(guān)對象間的一致性。我們不希望為了維持一致性而使各類緊密耦合,因為這樣降低了它們的可重用性。

            例如許多圖形用戶界面工具箱將用戶應(yīng)用界面表示與底下的應(yīng)用數(shù)據(jù)分離。定義應(yīng)用數(shù)據(jù)的類和負(fù)責(zé)界面的類可以各自獨立地復(fù)用。當(dāng)然他們也可以一起工作。觀察者的結(jié)構(gòu)圖如下所示:

            Observer

            Subject

            l 目標(biāo)知道它的觀察者??梢杂腥我舛鄠€觀察者觀察同一個目標(biāo);

            l 提供注冊和刪除觀察者對象的接口;

            Observer

            l 為那些在目標(biāo)發(fā)生改變時需要獲得通知的對象定義一個更新接口;

            ConcreteSubject

            l 將有關(guān)狀態(tài)存入各ConcreteObserver對象;

            l 當(dāng)它的狀態(tài)發(fā)生改變時,向它的各個觀察者發(fā)出通知;

            ConcreteObserver

            l 維護(hù)一個指向ConcreteSubject對象的引用;

            l 存儲有關(guān)狀態(tài),這些狀態(tài)應(yīng)與目標(biāo)的狀態(tài)保持一致;

            l 實現(xiàn)Observer的更新接口以使自身狀態(tài)與目標(biāo)狀態(tài)保持一致;

            二、Document/View Architecture of MFC

            類CDocument主要用來存儲數(shù)據(jù);類CView綁定到CDocument并根據(jù)CDocument中的數(shù)據(jù)來顯示出畫面或用來處理與用戶的交互來操作CDocument中的數(shù)據(jù)。Document/View結(jié)構(gòu)的主要好處是一個Document支持多Views,假設(shè)你的程序可以讓用戶以表格的形式看到數(shù)據(jù),也可以以圖形的形式看到數(shù)據(jù),即數(shù)據(jù)有多種表現(xiàn)形式,并且當(dāng)數(shù)據(jù)改變時,表格和圖表形式都同時改變。在MFC中,表格視圖和圖形視圖可以是CView派生出來的不同的類,這些類可以只關(guān)聯(lián)上一個Document對象。Document對象保存數(shù)據(jù),這些視圖訪問Document對象并顯示出從Document對象獲得的數(shù)據(jù)。

            當(dāng)用戶更新這些視圖中的一個時,調(diào)用CDocument::UpdateAllViews函數(shù),將會通知這個Document關(guān)聯(lián)的所有視圖,這些視圖將會用CDocument最新的數(shù)據(jù)來更新自己。

            如果不把數(shù)據(jù)和視圖分離,這種情況編程將會復(fù)難,特別地當(dāng)視圖自己保存數(shù)據(jù)時。當(dāng)使用Document/View結(jié)構(gòu)后,生活變得容易,這個框架將會為你來做協(xié)調(diào)工作。

            Document/View

            国产精品久久久久一区二区三区| 亚洲国产高清精品线久久| 亚洲国产精品久久久天堂| 久久国产精品久久久| 成人免费网站久久久| 国产精品久久久久乳精品爆| 欧美麻豆久久久久久中文| 久久天天躁夜夜躁狠狠躁2022 | 天天做夜夜做久久做狠狠| 国产精品久久久久免费a∨| 久久久久女人精品毛片| 国内高清久久久久久| 亚洲一区二区三区日本久久九| 色88久久久久高潮综合影院| 久久福利片| 久久久久夜夜夜精品国产| 丁香狠狠色婷婷久久综合| 精品一区二区久久| 亚洲中文字幕久久精品无码喷水 | 国产亚洲婷婷香蕉久久精品| 欧美性猛交xxxx免费看久久久| 久久性生大片免费观看性| 99久久免费国产精精品| 伊人久久大香线蕉综合Av| 伊人久久大香线蕉精品不卡| 久久婷婷国产剧情内射白浆| 亚洲午夜久久久影院| 久久精品人妻中文系列| 欧美精品丝袜久久久中文字幕| 亚洲精品午夜国产va久久| 久久99精品免费一区二区| 久久久久夜夜夜精品国产| 久久无码人妻精品一区二区三区| 久久天天日天天操综合伊人av| 久久久精品久久久久影院| 亚洲综合久久夜AV | 久久精品国产亚洲av日韩| 久久97久久97精品免视看| 久久WWW免费人成一看片| 亚洲国产精品高清久久久| 亚洲精品高清国产一线久久|