单一设计模式
来源:互联网 发布:税友软件好用吗 编辑:程序博客网 时间:2024/05/29 12:00
单一设计模式分类: 单一设计模式,顾名思义就是产生一个对象到单一实例。单一设计模式的设计很简,单目前主要有两种方法,要注意的是要把类的构造函数设为私有的,防止对象可以直接new一个实例出来,下面一种是很常见到一种。
public class SingletonPattern { private static SingletonPattern single = null; //防止直接产生一个的实例 private SingletonPattern() { } public static SingletonPattern getInstance() { if(null == single){ single = new SingletonPattern(); } return single; } }
这种设计方法,很简单也很清晰,当要产生一个实例的时候,只要调用 SingletonPattern single = SingletonPattern.getInstance();就可以了。当要产生一个SingletonPattern对象的时候,首先会判断single 是否为null,当第一次产生SingletonPattern对象的时候,single肯定为null,然后就会new 一个SingletonPattern对象来,之后在需要产生SingletonPattern对象的时候,就不会重新new一个新的对象出来,用的还是第一次产生的对象,因为我们的single是一个static变量,所以只会被初始化一次。 这个方法设计出来的单实例模式,看上去很完美,没有任何瑕疵,但是如果考虑到多线程的话可能就会出现一个很隐晦的bug,也就是说单实例可能会失效,比如,有一个线程调用上面的代码产生一个SingletonPattern 对象S1,同时又有另一个线程也恰好的也要产生一个SingletonPattern 对象S2,我们知道每次产生SingletonPattern对象的时候,都会去判断single是否为null,如果此时在产生S1的时候,single = new SingletongPattern();还没有执行完,另一个线程中的S2,也恰运行到 null == single,这句,但是此时由于single 还没有被赋值所以,产生S2对象的时候,也会进入if的语句里面执行 single = new SingletongPattern();这样就会产生两个实例,就会出现混乱的情况,针对这种情况的发生,第二种产生单实例模式的方法也就出现了
public class SingletonPattern {private static final SingletonPattern single = new SingletonPattern(); //防止直接生成一个实例 private SingletonPattern(){} public synchronized static SingletonPattern getInstance() {return single; } }
这个方法和上面的方法的区别
1、将single 设置成final型,防止被改变
2、产生对象的时候 用synchronized进行同步处理
这样就可以很好的解决上面的问题了。
- 单一设计模式
- 单一设计模式(Singleton)
- 设计模式-单一职责
- 单一设计模式
- 单一设计模式
- 设计模式--单一职责
- 【设计模式】单一职责模式
- 设计模式-单一职责模式
- 设计模式-单一职责原则
- 设计模式-单一职责原则
- 设计模式---->单一职责原则
- 设计模式---单一职责原则
- 设计模式:单一职责原则
- 设计模式 单一职责原则
- 设计模式-单一职责原则
- 设计模式:单一职责原则
- 【设计模式】单一职责原则
- 设计模式:单一职责原则
- 数据库如何处理null 值
- 创建多线程应用程序
- NSString 与C++ string字符串的互转
- android开发笔记:常用权限说明
- 对linux平台远程升级的一些构想
- 单一设计模式
- Storyboard的基础知识-界面管理、多View切换、View间数据传递
- 用js模拟鼠标点击事件(事件触发)
- struts2 action编程
- c/c++经典面试试题及标准答案
- 腾讯安卓开发两面题目(2014)
- c++11标准中的lambda
- 《Linux 内核设计与实现》(LKD)第三版译者序
- oracle存储过程创建表权限不足解决方法