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

            Observer Pattern and the Document/View of MFC

            觀察者模式與MFC的Document/View

            一、觀察者概述

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

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

            Observer

            Subject

            l 目標(biāo)知道它的觀察者。可以有任意多個(gè)觀察者觀察同一個(gè)目標(biāo);

            l 提供注冊(cè)和刪除觀察者對(duì)象的接口;

            Observer

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

            ConcreteSubject

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

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

            ConcreteObserver

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

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

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

            二、Document/View Architecture of MFC

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

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

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

            Document/View


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            91精品国产综合久久婷婷| 亚洲v国产v天堂a无码久久| 国产人久久人人人人爽| 品成人欧美大片久久国产欧美...| 久久人人爽人人精品视频| 久久AV高潮AV无码AV| 一本久久a久久精品综合夜夜| 伊人久久大香线蕉精品不卡| 久久福利青草精品资源站免费 | 国产成人精品久久免费动漫 | 久久人妻少妇嫩草AV蜜桃| 亚洲av日韩精品久久久久久a| 91精品国产91久久久久久| 久久精品人人做人人妻人人玩| 欧美久久亚洲精品| 久久久精品日本一区二区三区| 国产成人精品白浆久久69| 久久精品国产色蜜蜜麻豆| 日韩欧美亚洲综合久久影院Ds| 久久青青草原国产精品免费| 久久国产亚洲精品无码| 中文字幕人妻色偷偷久久 | 久久这里只有精品首页| 色综合久久中文字幕无码| 热99RE久久精品这里都是精品免费| 国产毛片久久久久久国产毛片| 欧美精品一区二区精品久久| 97久久超碰国产精品2021| 国产亚洲精久久久久久无码| 久久婷婷五月综合97色| 久久久久亚洲Av无码专| 久久精品人人做人人爽电影蜜月 | 无码人妻少妇久久中文字幕 | 久久久久99精品成人片直播| 婷婷综合久久中文字幕蜜桃三电影| 久久久久久国产a免费观看黄色大片| 久久国产视屏| 久久久久亚洲国产| 久久综合给合久久狠狠狠97色 | 国产一久久香蕉国产线看观看| 久久97精品久久久久久久不卡|