单例模式
来源:互联网 发布:宁德时代 知乎 编辑:程序博客网 时间:2024/06/15 02:37
单例模式
一.为什么需要单例模式
•只允许存在唯一对象实例
•单例模式的商业应用
–网站计数器
–日志管理系统
–连接池、线程池、内存池
•获取对象实例的专门方法
–全局变量的定义不受控制,防君子不防小人
–专门方法是类型的一部分,我是类型我做主借助于类型禁止在外部创建对象仅在类型内部创建唯一对象实例提供用于获取对象实例公知接口
二.什么是单例模式
•禁止在类外部创建实例
–私有构造函数 private
•类自己维护其唯一实例
–静态成员变量 instance
•提供访问该实例的方法
–静态成员函数 getInstance()
三.如何实现单例模式
•饿汉式实现
–将单例类的唯一对象实例,实现为其静态成员变量
–优点:加载进程时静态创建单例对象,线程安全
–缺点:无论使用与否,总要创建
•懒汉式实现
–直到第一次使用时,才创建单例类的唯一对象实例
–优点:用则创建,不用不创建,什么时候用什么时候创建
–缺点:首次访问时动态创建单例对象,在多线程应用中,存在线程不安全的问题
//饿汉模式 3 class Singleton 4 { 5 public: 6 static Singleton& getInstance (void) 7 { 8 return s_instance; 9 } 10 private: 11 Singleton (void) {} 12 Singleton (Singleton const& that) {} 13 static Singleton s_instance;//这里static不能省,因为在类里不能声明相同类,同时如果定义全局变量和局部变量,都不是在同一个Singleton 14 //类的作用域里。 14 }; 15 Singleton Singleton::s_instance;
//懒汉模式 3 class Singleton 4 { 5 public: 6 static Singleton& getInstance (void) 7 { 8 if (!s_instance) 9 { 10 pthread_mutex_lock (&m_mutex); 11 if (!s_instance) 12 { 13 s_instance = new Singleton; 14 } 15 pthread_mutex_unlock (&m_mutex); 16 } 17 return *s_instance; 18 } 19 private: 20 Singleton (void) {} 21 Singleton (Singleton const& that) {} 22 static Singleton* s_instance; 23 static pthread_mutex_t m_mutex; 24 }; 25 Singleton* Singleton::s_instance = NULL; 26 pthread_mutex_t Singleton::m_mutex = PTHREAD_MUTEX_INITIALIZER;
阅读全文
0 0
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- Linux的free命令输出详解
- [K8S] Zabbix 搭建
- Count The Pairs HDU
- SaaS厂商该如何才能“活得”更久?
- 说说 JSON 的基本语法以及与 JavaScript 的异同
- 单例模式
- Tensorflow 入门
- Android开发错误汇总
- bootstrap 模态框嵌套,返回前一级模态框后拖动条消失解决办法
- 对象的强、软、弱和虚引用 利用软引用实现java对象的高缓存
- CMake里面怎么递归地设定头文件的搜索目录
- hbase编程指南
- 算法题:二分查找
- 学习资料