单例模式学习笔记
来源:互联网 发布:深圳教苑中学 知乎 编辑:程序博客网 时间:2024/06/05 07:46
单例
优点
1.减少内存开支
2.减少性能开销
3.写文件时避免资源多重占用
4.优化共享资源访问
缺点
1.自行实例化的特点导致无法扩展,只能修改源码
2.对测试不利,只有全部完成单例代码才能测试
3.与单一职责原则有冲突
适用
1.生成唯一序列号的环境
2.整个项目需要一个共享访问点
3.创建对象需要消耗资源过多(例如要访问IO和数据库)
4.需要定义大量静态常量和静态方法
代码:
CCDirector* CCDirector::sharedDirector(void)
{
if (!s_SharedDirector)//断点A
{
s_SharedDirector = new CCDisplayLinkDirector();
s_SharedDirector->init();
}
return s_SharedDirector;
}
线程不安全
例如:在线程高并发情况下,线程X和Y都执行到断点A,此时判断到系统中不存在s_SharedDirector,于是X和Y都创建了s_SharedDirector,导致单例不单。(低并发情况下不会产生)
复制
单例类不要实现Cloneabel复制接口
扩展
有上限的单例模式
例如:读文件时,启动多个固定数量的reader实例,在读文件时,可以快速响应
优点
1.减少内存开支
2.减少性能开销
3.写文件时避免资源多重占用
4.优化共享资源访问
缺点
1.自行实例化的特点导致无法扩展,只能修改源码
2.对测试不利,只有全部完成单例代码才能测试
3.与单一职责原则有冲突
适用
1.生成唯一序列号的环境
2.整个项目需要一个共享访问点
3.创建对象需要消耗资源过多(例如要访问IO和数据库)
4.需要定义大量静态常量和静态方法
代码:
CCDirector* CCDirector::sharedDirector(void)
{
if (!s_SharedDirector)//断点A
{
s_SharedDirector = new CCDisplayLinkDirector();
s_SharedDirector->init();
}
return s_SharedDirector;
}
线程不安全
例如:在线程高并发情况下,线程X和Y都执行到断点A,此时判断到系统中不存在s_SharedDirector,于是X和Y都创建了s_SharedDirector,导致单例不单。(低并发情况下不会产生)
复制
单例类不要实现Cloneabel复制接口
扩展
有上限的单例模式
例如:读文件时,启动多个固定数量的reader实例,在读文件时,可以快速响应
0 0
- 学习笔记:单例模式
- 学习 单例模式 笔记
- 单例模式学习笔记
- 单例模式-->学习笔记
- 单例模式学习笔记
- 单例模式学习笔记
- 单例模式学习笔记
- 单例模式学习笔记
- 学习笔记单例模式
- 单例模式学习笔记
- 【学习笔记】单例模式
- 设计模式学习笔记:单例模式
- 设计模式学习笔记-单例模式
- 设计模式学习笔记--单例模式
- 设计模式学习笔记-单例模式
- 设计模式学习笔记-单例模式
- 设计模式学习笔记--单例模式
- 设计模式--单例模式学习笔记
- listview 和 button 共存的问题
- cocos2d-x3.1基于Mac创建iOS项目
- 为Hadoop的MapReduce程序编写makefile
- POJ 1328 Radar Installation 贪心
- Android学习笔记之AndroidManifest.xml文件解析
- 单例模式学习笔记
- 我是如何来定时发布文章的
- Mysql:is not allowed to connect to this MySQL server
- ios 程序启动执行顺序
- android之ImageView
- UVA 10003 Cutting Sticks
- 【队列】poj1250 Tanning Salon
- DDD Reference
- 知识总结