MFC 中的設計模式分析
最近在學習設計模式,突然想到MFC裡面其實也包含有設計模式的原理,於是分析了一下,做一個筆記,網上也找了一些資料,在此一併感謝。
建立型模式 單例模式(Singleton Pattern)單例模式確保某一個類只有一個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。
任何MFC應用程式的第一步就是建立一個應用程式物件(CWinApp或者其子類的例項)。在一個MFC應用程式中只能有一個應用程式物件,而且只有一個獲取這個物件的全域性入口點(AfxGetApp()),所以CWinApp及其子類均屬於單例類(Singleton class)。
結構型模式
橋接模式(Bridge Pattern)
在MFC中,將物件儲存到持久化介質中或者從持久化介質取回物件的機制稱為序列化/反序列化(Serialization/Deserialization)。MFC使用橋接模式實現了序列化/反序列化,CArchive類提供了序列化/反序列化的介面,而CFile及其子類則提供了序列化/反序列化的實現(比如記憶體、硬碟檔案、Sockets等等)。
CArchive接受一個CFile或者其子類的物件作為建構函式的引數,從而獲取包括檔名稱、請求的操作型別(讀/寫)等必需的序列化資訊。客戶端使用CArchive物件執行序列化/反序列化操作,而無需關心CFile所採取的具體的持久化機制。
在此種模式中,一個目標物件管理所有相依於它的觀察者物件,並且在它本身的狀態改變時主動發出通知。這通常透過呼叫各觀察者所提供的方法來實現。
MFC中的文件/檢視結構其實是觀察者模式的一種變體。文件包含資料物件,充當目標角色;使用者通過檢視更新文件,檢視在這裡充當觀察者角色。一個文件可以有多個檢視。一旦使用者通過某個檢視改變了文件的資料物件,該檢視將通過呼叫UpdateAllViews方法來更新文件。這將觸發OnUpdate方法,從而通知其他與文件關聯的檢視更新顯示。檢視類通過過載OnUpdate方法從文件物件獲取更新資料。 模板方法模式
模板方法模式中,基類用一些抽象的操作定義了一個演算法的骨架,子類重定義演算法中的特定部分,以完成特定於子類的各種操作。類CView(AbstractClass)裡面的函式OnPaint、OnDraw。使用者只需在CView的派生類中的OnDraw
函式中編寫程式碼就可實現資料的正確顯示,而不必關心OnDraw如何被呼叫。
職責鏈模式
多個物件組成一個物件鏈,客戶請求沿著物件鏈進行傳播,直到有一個物件處理它。在MFC中,所有派生自CCmdTarget的類都能夠響應命令訊息(WM_COMMAND),所有派生自CWnd的類都能夠響應標準Windows訊息(除
WM_COMMAND 之外的訊息)。因 CWnd派生於CCmdTarget類,故派生自CWnd的類也可響應命令訊息。
中介模式
用一箇中介物件來封裝一系列的物件互動。中介模式將一系列物件間的多對多的通訊轉化為中介物件與各個物件的一對多的通訊,從而使其耦合鬆散,而且可以獨立的改變它們之間的互動。
MFC中對話方塊類作為中介類,對話方塊上的其它控制元件作為同事類。如編輯框,按鈕,下拉鍊表框等。當對話方塊上的兩個或多個控制元件需要通訊時(如編輯框輸入有效資料後使按鈕使能),傳送訊息的控制元件首先將訊息傳送到它的父視窗(對話方塊),然後父視窗將收到的訊息轉發到各目標控制元件。
參考資料:http://blog.csdn.net/guolongcang/article/details/6754424
http://hi.baidu.com/piperworldcup/blog/item/1c54f7af12b1b1fefaed507f.html
http://wenku.baidu.com/view/c7ca4bd950e2524de5187edd.html
相關推薦
MFC 中的設計模式分析
最近在學習設計模式,突然想到MFC裡面其實也包含有設計模式的原理,於是分析了一下,做一個筆記,網上也找了一些資料,在此一併感謝。 建立型模式 單例模式(Singleton Pattern)單例模式確保某一個類只有一個例項,而且自行例項化並向整個系統提供這個例項。這個類
java23中設計模式之適配器模式
print 鍵盤 分享 rri sys 完成 out img closed package com.bjsxt.adapter; /** * 被適配的類 * (相當於例子中的,PS/2鍵盤) * @author Administrator * */
Java 23中設計模式
叠代 職責鏈模式 方法 備忘錄模式 創建型 抽象工廠 適配器 狀態模式 橋接模式 創建型模式(5): --單例模式、工廠模式、抽象工廠模式、建造者模式、原型模式。 結構型模式(7): --適配器模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、代理模式。 行為
java23中設計模式之叠代器模式
asn spl gre ring ext concrete sta get face package com.bdqn.iterator; public interface MyIterator { //將遊標指向第一個元素 void first()
Spring 框架的設計理念與設計模式分析
問題 面向對象編程 -h oop ram 重要 原因 依賴 object 轉自: https://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/ Spring 的設計理念 前面介紹了 Spring 的三
java23中設計模式之策略模式
log author 批量 isp contex view strategy ext 不同 package com.bjsxt.strategy; /** * 負責和具體的策略類交互 * 這樣的話,具體的算法和直接的客戶端調用分離了,使得算法可以獨立於客戶端獨立
java23中設計模式之代理模式
唱歌 [] lap pen 技術分享 contract rac display images staticproxy ---靜態代理 package com.bjsxt.proxy.staticProxy; public interface Star
23中設計模式包括哪些
單例模式 自動更新 %20 att 技術 讓其 emp 直接 獲得 傳送門(轉載):https://www.cnblogs.com/Leo_wl/p/6067267.html 附(github設計模式):https://github.com/iluwatar/java-d
Tomcat的設計模式分析
責任鏈模式 Tomcat 中一個最容易發現的設計模式就是責任鏈模式,這個設計模式也是 Tomcat 中 Container 設計的基礎,整個容器的就是通過一個鏈連線在一起,這個鏈一直將請求正確的傳遞給最終處理請求的那個 Servlet。 責任鏈模式的原理
java23中設計模式之觀察者模式
什麼叫觀察者模式? 當被觀察者的資料更新時,將會通知觀察該主題的所有觀察者。就像---微信公眾號就是被觀察者---關注該公眾號的就是觀察者---》 當公眾號更新文章時,關注的人就會獲得該資訊。這就是觀察者模式的應用。 用圖說明: 下面將用程式碼來解釋上面的內容: 1.觀
php的23中設計模式
原文地址 https://my.oschina.net/botkenni/blog/1603660 PhpDesignPatterns 【PHP 中的設計模式】 一、 Introduction【介紹】 設計模式:提供了一種廣泛的可重用的方式來解決我們日常
工廠設計模式分析
簡單工廠: 為了符合開閉原則和單一職責原則:把物件的建立過程獨立出來。放進工廠類實現而呼叫者不需要知道具體的構造過程。 在工廠類中一開始分別設定不同的生產方法提供給使用者呼叫,這樣呼叫者需要了解工廠的好幾種方法,不符合 迪米特原則:所以改成一個方法,呼叫者分
Android原始碼設計模式分析一期釋出
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
NO3-java中設計模式之建造者模式
說明 參考文獻:http://www.runoob.com/design-pattern/builder-pattern.html 上邊的這個菜鳥教程是真的不錯,我也是借花獻佛,只是自己寫了一哈,加上自己的理解和程式碼註釋來分享一下心得吧!免得以後忘了。 建造者模式的理解 建造者模式
軟體架構設計模式——23中設計模式
建立型模式 1、FACTORY—追MM少不了請吃飯了,麥當勞的雞翅和肯德基的雞翅都是MM愛吃的東西,雖然口味有所不同,但不管你帶MM去麥當勞或肯德基,只管向服務員說“來四個雞翅”就行了。麥當勞和肯德基就是生產雞翅的Factory。 工廠模式:客戶類和工廠類分開。消費者任何時候需要某種產品
23中設計模式概括及六種設計原則(一)
一、設計模式分類 總體來說模式依據目的可分為建立型模式(Creational)、結構型模式(Structural)、行為型模式(Behavioral)三種。 建立型模式:處理物件的建立。共5種:工廠方法模式(Factory Method)、抽象工廠模式(Abstract Factory)、建造者模式(Bu
Tomcat中設計模式-觀察者模式
開篇 觀察者模式的定義,有多個物件在關注著一個物件,如果這個物件的狀態發生了改變,其它依賴(關注)它的物件就會收到通知,然後在接收到通知以後各個物件做出相應的動作。 觀察者模式涉及到兩個概念(觀察者和被觀察者),被觀察者只能有一個,而觀察這個觀察者的物件可以用多個。【一對多】定義物件間的
Java中設計模式(八):建造者模式
介紹 今天我們將研究java中的Builder模式。Builder 設計模式是一種創造性的設計模式,如工廠模式和抽象工廠模式。 當Object包含許多屬性時,引入了Builder模式來解決Factory和Abstract Factory設計模式的一些問題。 當Object包含許多屬性時,Factory和Abs
23中設計模式在遊戲伺服器裡面例子
遊戲裡面有很多資料有用XML 形式配置,有用資料庫生成。 建立型(6) 1.簡單工廠模式 由一個工廠物件決定創建出哪一種產品類的例項。 比如在遊戲活動設計的時候:每個活動配置資料的生成 public abstract class AbsLimitActiv
23中設計模式之抽象工廠模式
抽象工廠模式的定義 定義: 為建立一組相關或互相依賴的物件提供一個介面,而且無須制定它們的具體類 抽象工廠模式的實現 兩個產品族, 其類圖如下: 抽象產品類程式碼如下: 產品A的1級和2級類程式碼如下: 產品