MFC 中的设计模式分析
最近在学习设计模式,突然想到MFC里面其实也包含有设计模式的原理,于是分析了一下,做一个笔记,网上也找了一些资料,在此一并感谢。
单例模式(Singleton Pattern)
单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。
任何MFC应用程序的第一步就是创建一个应用程序对象(CWinApp或者其子类的实例)。在一个MFC应用程序中只能有一个应用程序对象,而且只有一个获取这个对象的全局入口点(AfxGetApp()),所以CWinApp及其子类均属于单例类(Singleton class)。
结构型模式
桥接模式(Bridge Pattern)桥接模式是指将接口和实现解耦,从而二者可以独立变化。
在MFC中,将对象存储到持久化介质中或者从持久化介质取回对象的机制称为序列化/反序列化(Serialization/Deserialization)。MFC使用桥接模式实现了序列化/反序列化,CArchive类提供了序列化/反序列化的接口,而CFile及其子类则提供了序列化/反序列化的实现(比如内存、硬盘文件、Sockets等等)。
CArchive接受一个CFile或者其子类的对象作为构造函数的参数,从而获取包括文件名称、请求的操作类型(读/写)等必需的序列化信息。客户端使用CArchive对象执行序列化/反序列化操作,而无需关心CFile所采取的具体的持久化机制。
观察者模式(Observer Pattern)
在此种模式中,一个目标物件管理所有相依于它的观察者物件,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。
MFC中的文档/视图结构其实是观察者模式的一种变体。文档包含数据对象,充当目标角色;用户通过视图更新文档,视图在这里充当观察者角色。一个文档可以有多个视图。一旦用户通过某个视图改变了文档的数据对象,该视图将通过调用UpdateAllViews方法来更新文档。这将触发OnUpdate方法,从而通知其他与文档关联的视图更新显示。视图类通过重载OnUpdate方法从文档对象获取更新数据。
模板方法模式
模板方法模式中,基类用一些抽象的操作定义了一个算法的骨架,子类重定义算法中的特定部分,以完成特定于子类的各种操作。类CView(AbstractClass)里面的函数OnPaint、OnDraw。用户只需在CView的派生类中的OnDraw
函数中编写代码就可实现数据的正确显示,而不必关心OnDraw如何被调用。
职责链模式
多个对象组成一个对象链,客户请求沿着对象链进行传播,直到有一个对象处理它。在MFC中,所有派生自CCmdTarget的类都能够响应命令消息(WM_COMMAND),所有派生自CWnd的类都能够响应标准Windows消息(除 WM_COMMAND 之外的消息)。因 CWnd派生于CCmdTarget类,故派生自CWnd的类也可响应命令消息。
中介模式
用一个中介对象来封装一系列的对象交互。中介模式将一系列对象间的多对多的通信转化为中介对象与各个对象的一对多的通信,从而使其耦合松散,而且可以独立的改变它们之间的交互。
MFC中对话框类作为中介类,对话框上的其它控件作为同事类。如编辑框,按钮,下拉链表框等。当对话框上的两个或多个控件需要通信时(如编辑框输入有效数据后使按钮使能),发送消息的控件首先将消息发送到它的父窗口(对话框),然后父窗口将收到的消息转发到各目标控件。
MFC 中的设计模式分析的更多相关文章
- 阶段3 1.Mybatis_02.Mybatis入门案例_2.mybatis入门案例中的设计模式分析
读取配合文件 创建工厂 最终图
- MFC中使用FLASH
一.准备工作 第一步:下载并安装Adobe Flash Player. 从官方网站(http://get.adobe.com/cn/flashplayer/)上下载最新的Flash Player(大约 ...
- MFC中添加消息响应函数
转自:http://blog.csdn.net/eddy_liu/article/details/8474677 目前,用MFC设计的Windows应用程序几乎都采用文档/视图结构.这种程序框架与简单 ...
- MFC中的一些视图
本章主要介绍MFC中主要的视图类,这些继承自Cview类. 继承关系如上图所示. 滚动视图 CscrollView给Cview添加了基本的滚动功能,它包含WM_VSCROLL和WM_HSCROLL消息 ...
- MFC中的CString类使用方法指南
MFC中的CString类使用方法指南 原文出处:codeproject:CString Management [禾路:这是一篇比较老的资料了,但是对于MFC的程序设计很有帮助.我们在MFC中使用字符 ...
- MFC中对基于ODBC对数据ACCESS数据库的增删改查。
在MFC中可以使用很多方法对数据库进行操作. 什么ODBC 什么ADO之类的,这里要介绍使用的ODBC这种方法,通过本文的阅读可以达初步掌握在MFC里面通过ODBC访问ACCESS数据库. 涉及到的 ...
- Spring 框架的设计理念与设计模式分析(山东数漫江湖)
Spring 的骨骼架构 Spring 总共有十几个组件,但是真正核心的组件只有几个,下面是 Spring 框架的总体架构图: 图 1 .Spring 框架的总体架构图 从上图中可以看出 Spring ...
- Tomcat设计模式分析(转) 2
Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析 这个分为两个部分的系列文章研究了 Apache Tomcat 服务器的系统架构以及其运用的很多经典设计模式.第 1 部分 分析了 Tom ...
- 在MFC中使用Cstring
此文介绍了关于MFC使用CString的资料,可一参考一下. 转自于VC知识库:http://www.vckbase.com/index.php/wv/829 通过阅读本文你可以学习如何有效地使用 C ...
随机推荐
- OC Nsstring的使用
// // main.m // NSString // // Created by mj on 13-4-5. // Copyright (c) 2013年 itcast. All rights re ...
- Windows Server 2008 安装wampserver失败的总结
1.最好选择2.4以下版本. 2.如果报确实MSVCR100.dll的错误,需要下载运行环境包(参考博客)
- JavaScript的DOM_操作内容
一.innerText 属性 <script type="text/javascript"> window.onload = function(){ var box = ...
- Redis客户端 Spring Data Redis(未完)
官网:http://projects.spring.io/spring-data-redis/ 1.0 参考之前的一片文章:Gradle入门实战(Windows版) 构建java applicati ...
- api的使用机制:继承、实例化、实现(继承)配置、实例(参数化)配置、机制管理模块
api的使用机制:继承.实例化.实现(继承)配置.实例(参数化)配置.机制管理模块 facade模式.管理模块
- 【剑指offer】字符串的组合
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/mmc_maodun/article/details/26405471 转载请注明出处:http:// ...
- [LCOI2018][WX] Tirpitz
\([LCOI2018][WX11.1]~Tirpitz\) 时限:1s 内存限制:131072KB 输入文件: T.in 输出文件: T.out 题目背景 王九日很颓废,这也就是他为什么这么弱的原 ...
- 跟我一起写 Makefile (Linux )
1.昨天 在 Linux 下用 touch 指令 新建了一个 hello.c 并且使用 vim 编辑器 写了代码 ,使用 gcc 指令编译 最后运行 成功了 .具体方式如下: 在Linux 根目 ...
- Java参数传递对象引用传递失效
产线问题排查,方法传递对象引用但返回后对象一直为空 原因: null作为参数传递的时候,就不是引用传参了 Java参数引用传递之例外:null 众所周知的是,java中除基本类型外,参数都是引用传递. ...
- C#强大的编程功能
下面列出一些C#重要的功能 1.布尔条件 2.自动垃圾回收 3.标准库 4.组件版本 5.属性和事件 6.委托和事件管理 7.易于使用的泛型 8.索引器 9.条件编译 10.简单的多线程 11.LIN ...