一馍资、簡介
Java中單例模式定義:“一個類有且僅有一個實例故觅,并且自行實例化向整個系統(tǒng)提供”厂庇。要點就是只能有一個實例,且可以向整個系統(tǒng)提供該實例输吏。一般來說有這五種寫法:懶漢式权旷,餓漢式,雙重鎖形式,靜態(tài)內(nèi)部類拄氯,枚舉躲查。
二、實例
2.1懶漢式
<code>
public class Singleton{
private static Singleton instance = null;
private Singleton(){}
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
</code>
特點:延遲加載译柏,但同步了整個方法镣煮,效率低,不推薦使用鄙麦。
2.2 餓漢式
<code>
public class Singleton{
private static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}
</code>
特點:代碼簡潔典唇,但是沒有延遲加載。
2.3 雙重鎖形式
<code>
public class Singleton{
private volatile static Singleton instance = null;
private Singleton(){}
public static Singleton getInstance(){
if(instance == null){
synchronized(Singleton.class){
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
</code>
特點:延遲加載胯府,使用了volatile介衔。
2.4 靜態(tài)內(nèi)部類
<code>
public class Singleton{
private static class SingletonHolder{
private static final Singleton INSTANCE = new Singleton();
}
private Singleton(){}
public static Singleton getInstance(){
return SingletonHolder.INSTANCE;
}
}
</code>
特點:延遲加載
2.5 枚舉
<code>
public enum Singleton{
INSTACNE;
}
</code>
特點:可防止反序列化重新創(chuàng)建新的對象