单例设计模式是把类的构造器私有化来不让别人new对象。然后创建一个静态并是自己类型的私有的属性,
用 get 方法让别人访问。作用于经常创建对象但又没有持续使用的和有些对象在整个运行环境中只有一个对象的情况都适合使用单例模式。
饿汉式
是加载类的时候就直接创建对象在私有属性中来等待别人通过get方法来使用。这个是模式速度快但相对来说耗资源一些。
public class Danli{
private Danli(){}
private static Danli Danli=new Danli();
public Danli getDanli(){
return Danli;
}
}
懒汉式
是加载类时并没有创建对象,是等到比人调用它的时候才开始new对象。这样的单例省资源但速度较慢,因为有同步锁每个调用者都要排队进行。
public class Danli{
private Danli(){}
private static Danli Danli;
public synchronized static Danli getDanli(){
if(Danli==null){
Danli Danli=new Danli();
}
return Danli;
}
}
懒汉式优化版
既然懒汉式的同步锁上的排队拖慢的速度,我们可以对此进行优化,在没有创建对象的时候的那写调用者需要排队外,如果对象已经创建了,这时就不用在排队了。因为想饿汉式一样,直接调用就行。
public class Danli{
private Danli(){}
private static Danli Danli;
public static Danli getDanli(){
//这里先判断Danli对象创建了没有,如果创建了就直接拿去用就行,如果没有创建就进入if里
if(Danli==null){
//同步放在这里,在这里排队
synchronized(Danli.class){
//进来之后再问一下是否已经创建出对象了,没有就创建
if(Danli==null){
Danli Danli=new Danli();
}
}
}
return Danli;
}
}