单例模式
2015-07-02 14:24
232 查看
问题引入:
我希望工具箱要么不出现,出现也只出现一个,可实际上却是每次点击菜单,实例化‘工具箱’,他就会出来一个,这样点击多次就会出现很多个‘工具箱’该怎么办?
单例模式
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象,一个最好的方法就是,让类自身负责保存它的唯一实例,这个类可以保证没有其他实例可以被创建,并且它可以提过一个访问该实例的方法。
单例模式的好处:
单例模式因为Singleton类封装他的唯一实例,这样它可以严格地控制客户怎样访问它已经何时访问它。简单地说就是对唯一实例的受控访问。
二、多线程时的单例
lock是确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。
这是因为加锁时,instance实例有没有被创建过实例还不知道,怎么对它加锁呢?
缺点:
每次调用GetInstance方法时都需要lock,这样会影响性能,所以需要改良。方法如下:
为什么两次判断instance实例是否创建?如图:
public static Singleton GetInstance()
{
单例模式试图解决的两个基本问题:全局访问和实例化控制。
相关文章推荐
- springmvc学习笔记---idea创建springmvc项目
- 粒子效果的总结
- html5 之 canvas 相关知识(二)API-fillStyle
- ASIHttpRequest框架使用说明-----post请求 以及监听网络
- 欢迎使用CSDN-markdown编辑器
- Linux下安装SVN客户端
- Objective-C中的instancetype和id区别
- Spring与事务管理
- It appears as though you do not have permission to view information you requested........
- linux中内核的一个不错的参数somaxconn
- Android studio 启动另一个activity
- Leetcode 27 Remove Element
- 【原创】win7同局域网下共享文件
- git
- ListView中使用单例添加按钮事件监听
- Ubantu开发环境安装部署
- BZOJ 1103: [POI2007]大都市meg( 树链剖分 )
- 7月1号会议讲话
- Extjs中给同一个GridPanel中的事件添加参数的方法
- 【LeetCode】1 Two Sum