• 模板实现单例模式包装器


    单例模式是一种常用的软件设计模式,它的核心包含一个特殊的类,单例模式可以保证程序运行过程中有且仅有一个实例,也就是一个对象。单例模式的特点为:

    1、构造函数私有;

    2、析构函数私有;

    3、拷贝构造函数私有。

    单例模式包装器是指用一个单例模板类A,将一个已存在的类B包装成类C,以此来实现多个不同类的单例模式。请看下边的代码:

     1 /*
     2 2018.7.22
     3 模板实现单例模式包装器
     4 by Chenyuxiang
     5 */
     6 #include <iostream>
     7 #include <cstdlib>
     8 using namespace std;
     9 
    10 template <class T>
    11 class Single{
    12     private:
    13         Single(){}
    14         ~Single(){}
    15         Single(const Single& cs){}
    16         Single& operator=(const Single&){}
    17         static void Init(){
    18             m_pinst = new T();
    19         }
    20         static void Destroy(){
    21             delete m_pinst;
    22             m_pinst = NULL;
    23         }
    24         static T* m_pinst;
    25     
    26     public:
    27         static T& Getinstance(){
    28             if(!m_pinst)
    29             {
    30                 Init();
    31                 atexit(Destroy);
    32             }
    33             return *m_pinst;
    34         }
    35 };
    36 template <class T>
    37 T* Single<T>::m_pinst = NULL;
    38 
    39 class Application{
    40     public:
    41         Application(){cout << "construct..." << endl;}
    42         ~Application(){cout << "desconstruct..." << endl;}
    43         void Run(){cout << "Run..." << endl;}
    44 };
    45 
    46 typedef Single<Application> Applicate;
    47 
    48 int main(int argc,char* argv[])
    49 {
    50     Applicate::Getinstance().Run();
    51     Applicate::Getinstance().Run();
    52     return 0;
    53 }

    运行结果如下:

    我们可以看到,Application的构造函数和析构函数只调用了一次,说明程序运行过程中有且仅有一个Application类对象。但存在的该对象是可以多次调用静态成员函数Run()的。

    *值得注意的是,我将Single<Application>重命名为Applicate,因此Applicate是单例类,而Application依然是普通类,仍然可以在同一个程序中创建多个对象。

    温润如玉,坚毅如铁。
  • 相关阅读:
    老鼠走迷宫
    堆栈的应用 问题还未解决
    计数排序与基数排序
    C++类的描述
    选择排序 冒泡排序 插入排序
    计算名次
    多项式求值 n维多项式 Horner解法
    003_sublime如何实时预览markdown
    002_git下载的源码怎么打成jar包呢?
    001_idea常用插件
  • 原文地址:https://www.cnblogs.com/heisen/p/9351456.html
Copyright © 2020-2023  润新知