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. 远程登录-出现身份验证错误[可能是由于CredSSP加密Oracle修正]

    问题描述 远程桌面登录时,出现身份验证错误,要求的函数不正确,这可能是由于CredSSP加密Oracle修正. 原因,系统更新导致 CVE-2018-0886 的 CredSSP 更新 解决方法1 运 ...

  2. Task ‘run’ not found in root project

    问题现象: Task 'run' not found in root project 'springframework'. 问题原因: 没有在gradle.build文件中添加如下配置, mainCl ...

  3. Could not publish to the server. null argument:

    启动tomcat或clean tomcat报错:Could not publish to the server. null argument: Could not publish to the ser ...

  4. Mybatis批量插入及传参问题

    先看需求:将报文对象Message批量插入分库分表的Oracle数据库中 一般如果直接传入List的话,需要加上parameterType="java.util.List" ,然后 ...

  5. luogu U41573 War2

    一道NOIP2018模拟的DayT3 原本没打算做,结果Dukelv秒了(强的过分),就来看看. 状压dp.令dp[i][j]表示在状态 i ,最后选了第 j 个数是的最大分值. 所以我们枚举状态 i ...

  6. webConfig中System.Web 和 System.WebServer节点读取

    webConfig中System.Web 和 System.WebServer节点读取根据应用程序池中托管管道模式有关. 在网站发布到服务器的IIS上时,应用程序池中托管管道模式分为经典和集成. Sy ...

  7. diogo谈框,仿prompt()方法布局

    展示效果: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  8. 第20章 USART—串口通讯

    本章参考资料:<STM32F76xxx参考手册>USART章节. 学习本章时,配合<STM32F76xxx参考手册>USART章节一起阅读,效果会更佳,特别是涉及到寄存器说明的 ...

  9. python Web开发之 WSGI & uwsgi & uWSGI

    首先弄清下面几个概念: WSGI 全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server ...

  10. Reading Notes : 180211 概述计算机

    读书<计算机组成原理> <鸟哥的Linux私房菜 基础篇> 本章介绍电子计算机概念以及发展历史和发展趋势,内容摘自<计算机组成原理>  <鸟哥的Linux私房 ...