博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
单例模式——宏的实现
阅读量:6589 次
发布时间:2019-06-24

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

这几天研究起来单例模式,这对日常工程来说还是比较常见,例如配置文件等就需要用单例模式来声明。

由于厌烦的单例模式代码反复的重写,这几天想了不少的方法。而目前,只想到一种方法,就是用宏来做对应的声明。

 

我采用的单例模式是利用私有化构造函数来实现的,这个方法是最简单也是最基本的,多线程下是否可用有待考究。

1 #define INITIALIZE_SINGLETON_CLASS(ClassName)\ 2     ClassName*ClassName::m_this = NULL; 3  4 #define OBTAIN_SINGLETON_CLASS(ClassName)\ 5     ClassName::obtain##ClassName(); 6  7 #define RELEASE_SINGLETON_CLASS(ClassName)\ 8     ClassName::release##ClassName(); 9 10 #define ANNOUNCEMENT_SINGLETON_CLASS(ClassName)\11 private:\12     static ClassName* m_this;\13 private:\14     ClassName(){};\15     ~ClassName(){};\16 public:\17     static ClassName& obtain##ClassName()\18     {\19         if(!m_this) m_this = new ClassName();\20         return (*m_this);\21     }\22     static void release##ClassName()\23     {\24         if(m_this) delete m_this;\25         m_this = NULL;\26     }\27 public:28 29 #define ObtainSingletonClass(ClassName) OBTAIN_SINGLETON_CLASS(ClassName)30 #define ReleaseSingletonClass(ClassName) RELEASE_SINGLETON_CLASS(ClassName)

 

这组宏中,声明了一个ANNOUNCEMENT_SINGLETON_CLASS宏,用在类的声明中;INITIALIZE_SINGLETON_CLASS宏,用于初始化全局唯一静态变量;

另外的两个宏OBTAIN_SINGLETON_CLASSRELEASE_SINGLETON_CLASS则是用于获取和释放该类的全局唯一对象。

使用的时候很简单,比如声明一个配置管理类:

1.在类.h文件中添加声明ANNOUNCEMENT_SINGLETON_CLASS宏,

1 // SystemConfig.h3 class SystemConfig4 {5     ANNOUNCEMENT_SINGLETON_CLASS(SystemConfig);6 };

2.在.cpp文件中添加初始化INITIALIZE_SINGLETON_CLASS宏,

1 // SystemConfig.cpp3 INITIALIZE_SINGLETON_CLASS(SystemConfig);

这样就可以了。

 

具体使用的时候:

可以通过函数:obtian##ClassName来获取全局唯一实例对象,通过release##ClassName来释放全局唯一对象;或者利用两组宏OBTAIN_SINGLETON_CLASSRELEASE_SINGLETON_CLASS

当然,为了编码规范,我还另外将这两个宏专门声明成骆驼表示法的函数形式,让代码看起来更整洁。

转载于:https://www.cnblogs.com/BlueWinters/p/3587941.html

你可能感兴趣的文章
第四章:Django 的模板系统(转)
查看>>
What is corresponding Cron expression to fire in every X seconds, where X > 60? --转载
查看>>
线性同余方程模板( A+C*x=B(mod D) )
查看>>
OpenCV Open Camera 打开摄像头
查看>>
2015第49周三
查看>>
CentOS6.5下安装MySQL
查看>>
7.5 数据注解特性--MaxLength&&MinLength
查看>>
企业日志分析 五大问题需重点注意
查看>>
《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高...
查看>>
MyBatis学习总结(五)——实现关联表查询
查看>>
SQLite介绍、学习笔记、性能测试
查看>>
【.NET深呼吸】基础:自定义类型转换
查看>>
java继承2——类与继承(转)
查看>>
【转载】Eclipse 的快捷键以及文档注释、多行注释的快捷键
查看>>
Android开发之IP拨号器原理
查看>>
HDU3537-Daizhenyang's Coin(博弈SG-打表)
查看>>
Android Studio快捷键每日一练(3)
查看>>
LINUX CACHE IO THREAD
查看>>
Android开发之MediaPlayer和SurfaceView组成视频播放器
查看>>
HTML5 Canvas图片操作简单实例1
查看>>