设计模式之单例模式(Singleton)
2016-05-06 12:11
375 查看
单例模式(Singleton)
优点:
1.提供了对唯一实例的访问方法
2.内存中只存在一个对象,节约系统内存
3.允许可变数目的实例
缺点:
1.由于没有抽象层,因此扩展有很大的困难
2.单例类的职责过重,在一定程度上违背了“单一职责原则”
代码示例:
Singleton.h
优点:
1.提供了对唯一实例的访问方法
2.内存中只存在一个对象,节约系统内存
3.允许可变数目的实例
缺点:
1.由于没有抽象层,因此扩展有很大的困难
2.单例类的职责过重,在一定程度上违背了“单一职责原则”
代码示例:
Singleton.h
#ifndef SINGLETON_H #define SINGLETON_H class Singleton { public: static Singleton& Install() { static Singleton s; return s; } private: Singleton(){} }; /** * 重用 * 奇异递归模板:在编译时,知道类型,可提高程序运行效率 */ template <typename T> class SingletonT { public: static T & Install() { static T s; return s; } protected: SingletonT(){} ~SingletonT(){} private: SingletonT(const SingletonT & rhs){} SingletonT &operator = (const SingletonT & rhs){} }; class SingletonTT : public SingletonT<SingletonTT> { }; /*线程版*/ #include <pthread.h> template <typename T> class SingletonM { public: static T &Install() { if(m_singLetonM == NULL) { pthread_mutex_init(&mutex,NULL); pthread_mutex_lock(&mutex); m_singLetonM = new SingletonM; pthread_mutex_unlock(&mutex); } return m_singLetonM; } protected: SingletonM(){} ~SingletonM(){} private: SingletonM(const SingletonM &rhs){} SingletonM & operator = (const SingletonM &rhs){} void destory() { if(m_singLetonM != NULL) delete m_singLetonM; m_singLetonM = NULL; } private: static T* volatile m_singLetonM; static pthread_mutex_t mutex; }; #endif // SINGLETON_H<strong>
相关文章推荐
- android使用butterknife InjectView和BindView
- android 加载超大图片内存溢出问题
- 学习下 linux
- Spring基础 注解实现Bean依赖注入
- 01背包第k大
- 关于udev,sys,proc,tmpfs一些定义的问题
- C++程序设计必知:生存期
- Android API中被@hide注释的方法引用报错解决
- leetcode.279. Perfect Squares
- java底层知识(3)--CPU 高速缓存
- 今天经理给我讲了好多东西(spring mvc)
- RHEL6.2下挂载光驱安装软件
- 【C#设计模式-迭代器模式】
- Flask下拉列表与数据库同步
- css模块化策略
- Xshell如何修改字体大小和颜色
- Opengl ES 线的三角化
- IOS开发中UIAlertController(警告框)的使用
- Windows配置NetBeans为SourceCodePro字体
- IIS6发布,报503,应用池自动停止