博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
介绍MFC框架中涉及到的设计模式(二)
阅读量:4840 次
发布时间:2019-06-11

本文共 1352 字,大约阅读时间需要 4 分钟。

接着上一篇《》介绍

单例模式(Singleton Pattern)

      单例模式是一种经常使用的软件设计模式。在它的核心结构中仅仅包括一个被称为单例类的特殊类。通过单例模式能够保证系统中一个类仅仅有一个实例并且该实例易于外界訪问。从而方便对实例个数的控制并节约系统资源。

假设希望在系统中某个类的对象仅仅能存在一个,单例模式是最好的解决方式。

     单例模式的要点有三个: 1.某个类仅仅能有一个实例;

                                              2.它必须自行创建这个实例;

                                              3.它必须自行向整个系统提供这个实例。

    单例模式典型的结构图例如以下所看到的:

由上图我们能够了解到,我们通过维护一个static成员变量来记录这个唯一的对象实例。通过一个Instance()接口来获得这个唯一的实例。

以下是一个用C++语言实现的Singleton模式的小样例帮助大家理解单例模式。注意(VC6.0能够执行)

代码片断1:Singleton.h //Singleton.h #ifndef _SINGLETON_H_ #define _SINGLETON_H_ #include 
using namespace std; class Singleton { public: static Singleton* Instance(); //获取唯一实例对象的接口protected: Singleton(); //防止被外界调用实例化。也能够声明成privateprivate: static Singleton* _instance; //保存唯一的实例对象}; #endif //~_SINGLETON_H_ 代码片断2:Singleton.cpp //Singleton.cpp #include "Singleton.h" #include
using namespace std; Singleton* Singleton::_instance = 0; Singleton::Singleton() { cout<<"Singleton...."<
using namespace std; int main(int argc,char* argv[]) { Singleton* sgn = Singleton::Instance(); return 0; }

我们来看一下MFC中有关的单例模式。

每个MFC应用实例都派生于类CWinApp。每个应用程序都仅仅应该有一个派生于CwinApp的实例。CwinApp在设计上保证了一个应用程序不能生成多个实例,而且提供了一系列的函数用于对该唯一对象的一些属性的訪问,包含AfxGetAppAfxGetInstanceHandleAfxGetResourceHandleAfxGetAppName等作为获取唯一实例对象的接口。

MFC是通过ASSERT来防止多次构造CWinApp对象的。在第二次构造CwinApp对象时。ASSERT内的表达式为假,将会弹出错误提示。

转载于:https://www.cnblogs.com/lxjshuju/p/7290716.html

你可能感兴趣的文章
用NSAttributedString实现简单的图文混排
查看>>
多语境的操作
查看>>
SNS营销——网商成功之道
查看>>
jqgrid 加载时第一页面只显示多少条数据
查看>>
magic模块 :Exception Value:failed to find libmagic. Check your installation
查看>>
C#小游戏(文字对战游戏)
查看>>
COGS2314. [HZOI 2015] Persistable Editor
查看>>
my college goal
查看>>
java switch case 枚举类型的反编译结果
查看>>
关于dubbo+shiro导致dubbo无法注入到Realm的问题解决方案
查看>>
entity framework使用技巧
查看>>
面试题24: 反转链表
查看>>
Ubuntu 下安装 Oracle Java
查看>>
collectionView/tableview刷新时关闭动画无效
查看>>
C#线程篇---解答线程之惑(2)
查看>>
Solr添加paoding分词器
查看>>
charles 抓包 (一)
查看>>
隐藏电池栏,遮罩层
查看>>
ES6学习之Iterator和For...of循环
查看>>
java.lang.Thread类的静态方法sleep()和yield()的比较
查看>>