单例模式Singleton
来源:互联网 发布:u盘中毒数据恢复 编辑:程序博客网 时间:2024/06/05 09:09
单例模式属于创建型模式的一种,在我们进行软件开发过程中,有很多类是全局唯一只创建一次的,例如app框架类、全局管理类、配置文件、日志、数据库等,这时采用单例模式能使我们的代码变得elegant。
下面给出UML类图和C++的示例代码:
// singleton.h#ifndef __SINGLETON_H__#define __SINGLETON_H__class CSingleton{private: CSingleton() {} ~CSingleton() {} static CSingleton* sm_pSingleton;public: static CSingleton* Instance(); static void ExitInstance();public: void Test() {printf("CSingleton::Test()\n");}};#endif // __SINGLETON_H__// singleton.cpp#include "Singleton.h"CSingleton* CSingleton::sm_pSingleton = NULL;CSingleton* CSingleton::Instance(){ if (sm_pSingleton == NULL) { sm_pSingleton = new CSingleton; } return sm_pSingleton;}void CSingleton::ExitInstance(){ if (sm_pSingleton) { delete sm_pSingleton; sm_pSingleton = NULL; }}// main.cpp#include "Singleton.h"int main(int argc, char* argv[]){ CSingleton::Instance()->Test(); CSingleton::ExitInstance(); getchar(); return 0;}
此外我们可以将CSington扩展为一种模板类CSingleton<T>
,避免重复去实现Instance和ExitInstance。
C/C++的宏亦可以完成精简代码的功能
#ifndef SINGLETON_H#define SINGLETON_H#define DISABLE_COPY(Class) \ Class(const Class &) = delete; \ Class &operator=(const Class &) = delete;#define SAFE_DELETE(p) {if (p) {delete (p); (p) = NULL;}}#define DECLARE_SINGLETON(Class) \ public: \ static Class* instance(); \ static void exitInstance(); \ private: \ Class() {}; \ DISABLE_COPY(Class) \ static Class* s_pInstance;#define IMPL_SINGLETON(Class) \ Class* Class::s_pInstance = NULL; \ Class* Class::instance(){ \ if (!s_pInstance){ \ s_pInstance = new Class; \ } \ return s_pInstance; \ } \ void Class::exitInstance(){ \ SAFE_DELETE(s_pInstance) \ }#endif // SINGLETON_H
通过在一个类头文件中使用DECLARE_SINGLETON宏,实现文件中使用IMPL_SINGLETON宏,我们就将这个类定义为了一个单例类。
阅读全文
1 0
- 单例(Singleton)模式
- singleton 单例模式
- Singleton单例模式
- Singleton(单例)模式
- Singleton 单例模式
- 单例模式(Singleton)
- 单例模式(Singleton)
- Singleton(单例)模式
- Singleton(单例)模式
- 单例模式(Singleton)
- 单例模式(Singleton)
- 单例模式Singleton
- Singleton (单例模式)
- Singleton单例模式
- 单例模式----SingleTon
- 单例模式-singleton
- 单例模式(Singleton)
- Singleton(单例模式)
- iOS开发UI篇—Quartz2D(自定义UIImageView控件)
- 忘记svn密码?-快速找回
- 交通工具
- 4---------最小生成树--prim算法
- bzoj 1770: [Usaco2009 Nov]lights 燈
- 单例模式Singleton
- 利用JSon在京东上实现随意商品评论的爬取
- IO流(7)--录入数据,拷贝到指定文件
- Java单例模式详解
- 【HTML】关于h5中的textarea标签
- Python GUI之tkinter 实战(一)
- Linux——Samba
- form表单提交中文乱码的详细解析
- 哈尔滨理工大学第七届程序设计竞赛决赛(网络赛-高年级组)- (A,B)