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 中的设计模式分析的更多相关文章

  1. 阶段3 1.Mybatis_02.Mybatis入门案例_2.mybatis入门案例中的设计模式分析

    读取配合文件 创建工厂 最终图

  2. MFC中使用FLASH

    一.准备工作 第一步:下载并安装Adobe Flash Player. 从官方网站(http://get.adobe.com/cn/flashplayer/)上下载最新的Flash Player(大约 ...

  3. MFC中添加消息响应函数

    转自:http://blog.csdn.net/eddy_liu/article/details/8474677 目前,用MFC设计的Windows应用程序几乎都采用文档/视图结构.这种程序框架与简单 ...

  4. MFC中的一些视图

    本章主要介绍MFC中主要的视图类,这些继承自Cview类. 继承关系如上图所示. 滚动视图 CscrollView给Cview添加了基本的滚动功能,它包含WM_VSCROLL和WM_HSCROLL消息 ...

  5. MFC中的CString类使用方法指南

    MFC中的CString类使用方法指南 原文出处:codeproject:CString Management [禾路:这是一篇比较老的资料了,但是对于MFC的程序设计很有帮助.我们在MFC中使用字符 ...

  6. MFC中对基于ODBC对数据ACCESS数据库的增删改查。

    在MFC中可以使用很多方法对数据库进行操作. 什么ODBC  什么ADO之类的,这里要介绍使用的ODBC这种方法,通过本文的阅读可以达初步掌握在MFC里面通过ODBC访问ACCESS数据库. 涉及到的 ...

  7. Spring 框架的设计理念与设计模式分析(山东数漫江湖)

    Spring 的骨骼架构 Spring 总共有十几个组件,但是真正核心的组件只有几个,下面是 Spring 框架的总体架构图: 图 1 .Spring 框架的总体架构图 从上图中可以看出 Spring ...

  8. Tomcat设计模式分析(转) 2

    Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析 这个分为两个部分的系列文章研究了 Apache Tomcat 服务器的系统架构以及其运用的很多经典设计模式.第 1 部分 分析了 Tom ...

  9. 在MFC中使用Cstring

    此文介绍了关于MFC使用CString的资料,可一参考一下. 转自于VC知识库:http://www.vckbase.com/index.php/wv/829 通过阅读本文你可以学习如何有效地使用 C ...

随机推荐

  1. 用w32tm设置服务器时间同步

    服务器时间同步是一个容易被忽视的问题,但在企业级应用环境中,不同服务器之间的时间差很可能引发应用系统问题.Windows提供的w32tm程序可以用来设置时间同步服务器,其用法如下: 1.指定外部时间源 ...

  2. c++由string组成的struct初始化崩溃

    struct _UserInfo { string username; string password; string ip; string port; } _UserInfo str={}; 这样就 ...

  3. webConfig详细跳转配置.[转]

    站更换域名,把旧域名用301指到新域名来. 从iis中设置url永久转向就可以,看上去很容易,用了一会儿才发现,参数都没有带上. 从微软网站上找到如下说明,果然好使: 重定向参考 (IIS 6.0,7 ...

  4. PowerDNS简单教程(4):优化篇

    目录: PowerDNS简单教程(1):安装篇 http://www.cnblogs.com/anpengapple/p/5205130.html PowerDNS简单教程(2):功能篇 http:/ ...

  5. 【转】 url中文乱码问题

    [转自]http://blog.csdn.net/rascalboy520/article/details/2511175 在URL中传递参数,是通过HTTP报头来传递的.并不是类似于通过表单来传递, ...

  6. 转:git 的常用命令

    转自:阮一峰 常用git命令清单 一般来说,日常使用只要记住下图6个命令,就可以了.但是熟练使用,恐怕要记住60-100个命令. 下面是我整理的常用 Git 命令清单.几个专用名词的译名如下. Wor ...

  7. MyBatis框架(6)动态sql

    本次全部学习内容:MyBatisLearning   什么是动态sql:     mybatis的核心,对sql进行灵活的操作,通过对表达式的判断,对sql灵活的拼接 在之前小案例的基础上我们先进行简 ...

  8. Spring 4 mvc+shiro+thymeleaf+JPA(Hibernate)+MySql eclipse项目模板

    本模板基本配制为:spring 4.3.8+thymeleaf 3.0.3 +hibernate 5.5.5 + mysql 5.7 IDE:eclipse 运行环境为:Tomcat 8.0.28 项 ...

  9. 【题解】洛谷P1052 [NOIP2005TG] 过河(DP+离散化)

    题目来源:洛谷P1052 思路 一开始觉得是贪心 但是仔细一想不对 是DP 再仔细一看数据不对 有点大 如果直接存下的话 显然会炸 那么就需要考虑离散化 因为一步最大跳10格 那么我们考虑从1到10都 ...

  10. 管理Django1.9静态文件static

    管理Django1.9静态文件static 网站通常需要增加图片.JavaScript.或者CSS等文件提供服务.在Django中,我们把这些文件称为“静态文件”(static files).Djan ...