zoukankan      html  css  js  c++  java
  • 介绍MFC框架中涉及到的设计模式(二)

    接着上一篇《介绍MFC框架中涉及到的设计模式(一)》介绍

    单例模式(Singleton Pattern)

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

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

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

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

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

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


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

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

    代码片断1:Singleton.h 
    //Singleton.h 
    #ifndef _SINGLETON_H_ 
    #define _SINGLETON_H_ 
    #include <iostream> 
    using namespace std; 
    class Singleton 
    { 
    public: 
    static Singleton* Instance(); //获取唯一实例对象的接口
    protected: 
     Singleton(); //防止被外界调用实例化。也能够声明成private
    private: 
    static Singleton* _instance; //保存唯一的实例对象
    }; 
    #endif //~_SINGLETON_H_ 
    代码片断2:Singleton.cpp 
    //Singleton.cpp 
    #include "Singleton.h" 
    #include <iostream> 
    using namespace std; 
    Singleton* Singleton::_instance = 0; 
    Singleton::Singleton() 
    { 
    cout<<"Singleton...."<<endl; 
    } 
    Singleton* Singleton::Instance() 
    { 
    if (_instance == 0) 
    { 
    _instance = new Singleton(); 
    } 
     return _instance; 
    } 
    代码片断3:main.cp 
    //main.cpp 
    #include "Singleton.h" 
    #include <iostream> 
    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内的表达式为假,将会弹出错误提示。



  • 相关阅读:
    ScrollVIew 边界阴影效果
    android 开发 常用工具类
    alertdialog.builder 自定义弹窗
    垂直的seekbar
    SlideSwitch
    [转]Android_气泡效果
    ListView 滚回顶部
    04_dljd_mysql登录和退出
    03_dljd_启动和关闭mysql服务
    02_dljd_mysql数据库的下载、安装与卸载
  • 原文地址:https://www.cnblogs.com/lxjshuju/p/7290716.html
Copyright © 2011-2022 走看看