zoukankan      html  css  js  c++  java
  • 模板实现单例模式包装器

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

    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依然是普通类,仍然可以在同一个程序中创建多个对象。

    温润如玉,坚毅如铁。
  • 相关阅读:
    使用私有api实现自己的iphone桌面,并根据app的使用次数对app排序
    坐标系的属性
    带坐标轴的几何画板
    空间几何体的直观图matlab
    设置npm的registry
    (原创)机器学习之numpy库中常用的函数介绍(一)
    (原创)交叉编译 tesseract
    (原创)计算机视觉之数学原理-基础篇
    (原创)nRF51 DFU 初始化包介绍及生成工具
    (原创)使用nRF51822/nRF51422创建一个简单的BLE应用 ---入门实例手册(中文)之五
  • 原文地址:https://www.cnblogs.com/heisen/p/9351456.html
Copyright © 2011-2022 走看看