小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【設(shè)計(jì)模式學(xué)習(xí)】MFC 中的設(shè)計(jì)模式分析

 嘆落花 2015-01-11

最近在學(xué)習(xí)設(shè)計(jì)模式,突然想到MFC里面其實(shí)也包含有設(shè)計(jì)模式的原理,于是分析了一下,做一個(gè)筆記,網(wǎng)上也找了一些資料,在此一并感謝。


創(chuàng)建型模式
單例模式(Singleton Pattern)
單例模式確保某一個(gè)類(lèi)只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。這個(gè)類(lèi)稱為單例類(lèi)。

任何MFC應(yīng)用程序的第一步就是創(chuàng)建一個(gè)應(yīng)用程序?qū)ο?CWinApp或者其子類(lèi)的實(shí)例)。在一個(gè)MFC應(yīng)用程序中只能有一個(gè)應(yīng)用程序?qū)ο?,而且只有一個(gè)獲取這個(gè)對(duì)象的全局入口點(diǎn)(AfxGetApp()),所以CWinApp及其子類(lèi)均屬于單例類(lèi)(Singleton class)。

結(jié)構(gòu)型模式

橋接模式(Bridge Pattern)橋接模式是指將接口和實(shí)現(xiàn)解耦,從而二者可以獨(dú)立變化。

在MFC中,將對(duì)象存儲(chǔ)到持久化介質(zhì)中或者從持久化介質(zhì)取回對(duì)象的機(jī)制稱為序列化/反序列化(Serialization/Deserialization)。MFC使用橋接模式實(shí)現(xiàn)了序列化/反序列化,CArchive類(lèi)提供了序列化/反序列化的接口,而CFile及其子類(lèi)則提供了序列化/反序列化的實(shí)現(xiàn)(比如內(nèi)存、硬盤(pán)文件、Sockets等等)。
CArchive接受一個(gè)CFile或者其子類(lèi)的對(duì)象作為構(gòu)造函數(shù)的參數(shù),從而獲取包括文件名稱、請(qǐng)求的操作類(lèi)型(讀/寫(xiě))等必需的序列化信息??蛻舳耸褂?strong>CArchive對(duì)象執(zhí)行序列化/反序列化操作,而無(wú)需關(guān)心CFile所采取的具體的持久化機(jī)制。

行為型模式
觀察者模式(Observer Pattern)
在此種模式中,一個(gè)目標(biāo)物件管理所有相依于它的觀察者物件,并且在它本身的狀態(tài)改變時(shí)主動(dòng)發(fā)出通知。這通常透過(guò)呼叫各觀察者所提供的方法來(lái)實(shí)現(xiàn)。
MFC中的文檔/視圖結(jié)構(gòu)其實(shí)是觀察者模式的一種變體。文檔包含數(shù)據(jù)對(duì)象,充當(dāng)目標(biāo)角色;用戶通過(guò)視圖更新文檔,視圖在這里充當(dāng)觀察者角色。一個(gè)文檔可以有多個(gè)視圖。一旦用戶通過(guò)某個(gè)視圖改變了文檔的數(shù)據(jù)對(duì)象,該視圖將通過(guò)調(diào)用UpdateAllViews方法來(lái)更新文檔。這將觸發(fā)OnUpdate方法,從而通知其他與文檔關(guān)聯(lián)的視圖更新顯示。視圖類(lèi)通過(guò)重載OnUpdate方法從文檔對(duì)象獲取更新數(shù)據(jù)。


模板方法模式

模板方法模式中,基類(lèi)用一些抽象的操作定義了一個(gè)算法的骨架,子類(lèi)重定義算法中的特定部分,以完成特定于子類(lèi)的各種操作。類(lèi)CView(AbstractClass)里面的函數(shù)OnPaint、OnDraw。用戶只需在CView的派生類(lèi)中的OnDraw
函數(shù)中編寫(xiě)代碼就可實(shí)現(xiàn)數(shù)據(jù)的正確顯示,而不必關(guān)心OnDraw如何被調(diào)用。


職責(zé)鏈模式 

多個(gè)對(duì)象組成一個(gè)對(duì)象鏈,客戶請(qǐng)求沿著對(duì)象鏈進(jìn)行傳播,直到有一個(gè)對(duì)象處理它。在MFC中,所有派生自CCmdTarget的類(lèi)都能夠響應(yīng)命令消息(WM_COMMAND),所有派生自CWnd的類(lèi)都能夠響應(yīng)標(biāo)準(zhǔn)Windows消息(除 WM_COMMAND 之外的消息)。因 CWnd派生于CCmdTarget類(lèi),故派生自CWnd的類(lèi)也可響應(yīng)命令消息。

中介模式

用一個(gè)中介對(duì)象來(lái)封裝一系列的對(duì)象交互。中介模式將一系列對(duì)象間的多對(duì)多的通信轉(zhuǎn)化為中介對(duì)象與各個(gè)對(duì)象的一對(duì)多的通信,從而使其耦合松散,而且可以獨(dú)立的改變它們之間的交互。

MFC中對(duì)話框類(lèi)作為中介類(lèi),對(duì)話框上的其它控件作為同事類(lèi)。如編輯框,按鈕,下拉鏈表框等。當(dāng)對(duì)話框上的兩個(gè)或多個(gè)控件需要通信時(shí)(如編輯框輸入有效數(shù)據(jù)后使按鈕使能),發(fā)送消息的控件首先將消息發(fā)送到它的父窗口(對(duì)話框),然后父窗口將收到的消息轉(zhuǎn)發(fā)到各目標(biāo)控件。


參考資料:http://blog.csdn.net/guolongcang/article/details/6754424

                   http://hi.baidu.com/piperworldcup/blog/item/1c54f7af12b1b1fefaed507f.html

                   http://wenku.baidu.com/view/c7ca4bd950e2524de5187edd.html

http://blog.csdn.net/hero06/article/details/7529681

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多