单例模式的写法和应用
来源:互联网 发布:2016中国汽车销售数据 编辑:程序博客网 时间:2024/05/03 10:26
众多设计模式中,单例模式比较常见的一种,面试和工作中也会经常接触到。本文以一个C++开发者的角度来探讨单例模式几种典型实现。设计模式经典GoF定义的单例模式需要满足以下两个条件:
1. 保证一个类只创建一个实例。
2. 提供对该实例的全局访问点。
如果系统有类似的实体(有且只有一个,且需要全局访问),那么就可以将其实现为一个单例。实际工作中常见的应用举例
- 日志类,一个应用往往只对应一个日志实例。
- 配置类,应用的配置集中管理,并提供全局访问。
- 管理器,比如windows系统的任务管理器就是一个例子,总是只有一个管理器的实例。
- 共享资源类,加载资源需要较长时间,使用单例可以避免重复加载资源,并被多个地方共享访问。
class Singleton
{
public:
staticSingleton& GetInstance()
{
if(NULL== m_pInstance)
{
Locklock;//基于作用域的 加锁,超出作用域,自动调用析构函数解锁
if(NULL== m_pInstance)
{
m_pInstance= new Singleton;
}
}
return*m_pInstance;
}
private:
Singleton();
~Singleton();
Singleton(constSingleton&);
Singleton&operator = (const Singleton&);
private:
staticSingleton* m_pInstance;
};
Lazy Singleton的一种线程安全改造是在Instance()中每次判断是否为NULL前加锁,但是加锁是很慢的。
而实际上只有第一次实例创建的时候才需要加锁。双检测锁模式被提出来,改造之后大致是这样
既然只需要在第一次初始化的时候加锁,那么在这之前判断一下实例有没有被创建就可以了,所以多在加锁之前多加一层判断,需要判断两次所有叫Double-Checked。
- 单例模式的写法和应用
- iOS单例模式和单例的写法
- 设计模式:单例模式的写法(基础写法和线程安全写法)
- 单例模式的写法
- 单例模式的写法
- 单例模式的写法
- 单例模式的写法
- 单例模式的写法
- 单例模式的写法
- 单例模式的写法和线程安全性的讨论
- iOS 单例模式的介绍和写法
- 单例模式写法
- 单例模式写法
- 单例模式写法
- 单例模式写法
- Java单例模式的各种写法和最优写法推荐
- Java单例模式的各种写法和最优写法推荐
- 单例模式的7种写法
- ubuntu搭建MTK_android编译环境
- 什么是云计算
- uFrame近况(2016年4月8日更新)
- OBject-C捕获异常,常用的异常处理方法
- ENUM 枚举类型
- 单例模式的写法和应用
- Windows cmd 命令大全
- radhat/centos添加静态路由
- 动态规划基础讲
- 零基础myeclipse下springBoot+maven+thymeleaf的开发(4) 修改端口以及打包
- 【学习笔记】3D图形核心基础精炼版-2:流程概念版
- 记录自己的第一次面试(网易java后台)
- js实现跑马灯效果
- angularjs directive内部controller link函数理解