首页 > 其他 > 详细

单例模式——宏的实现

时间:2014-03-08 17:56:52      阅读:506      评论:0      收藏:0      [点我收藏+]

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

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

 

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

bubuko.com,布布扣
 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)
bubuko.com,布布扣

 

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

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

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

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

1 // SystemConfig.h
3 class SystemConfig
4 {
5     ANNOUNCEMENT_SINGLETON_CLASS(SystemConfig);
6 };

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

1 // SystemConfig.cpp
3 INITIALIZE_SINGLETON_CLASS(SystemConfig);

这样就可以了。

 

具体使用的时候:

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

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

单例模式——宏的实现,布布扣,bubuko.com

单例模式——宏的实现

原文:http://www.cnblogs.com/BlueWinters/p/3587941.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!