设计模式:解决某一类问题最行之有效的方法。
Java中有23种设计模式。
单例模式:解决一个类在内存中只存在一个对象。
如何用代码实现?
1.将构造函数私有化;
2.在类中创建一个本类对象;
3.提供一个方法可以获取到该对象。
单例模式有两种方法实现:
一、懒汉式
对象是方法被调用时才初始化。
Single类进内存,对象还没有存在,只有调用了getInstance()方法时,才建立对象。
class Single{
private static Single s=null;
private Single(){}
public static Single getInstance()
{
if(s==null){
s=new Single();
}
return s;
}
}
二、饿汉式
先初始化对象,Single类一进内存,就已经创建好了对象。
class Single{
private static Single s=new Single();
private Single(){}
public static Single getInstance(){
return s;
}
}
开发一般用饿汉式,因为它安全简单。
如果用懒汉式,当多个程序同时访问时,就有可能出现问题,解决方案:
方案一:
class Single{
private static Single s=null;
private Single(){}
public static synchronized Single getInstance(){//加同步锁,一次只能进来一个,缺点:判断次数太多,影响速度。
s=new Single();
}
return s;
}
方案二:
class Single{
private static Single s=null;
private Single(){}
public static Single getInstance(){
if(s==null){
Synchronized(Single.class){
if(s==null){
/*
cpu轮流切换运行程序,当A进来,cpu切过去了,没有运行A的时候,A就被挂起,B就不能进来了,因为有同步锁。当C进来的时候,此时s!=null,就不会判断同步锁问题,这样减少了判断次数,速度会快点。
*/
s=new Single();
}
}
return s;
}
}
}
作者:Joanna.Yan
出处:http://www.cnblogs.com/Joanna-Yan/
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。