1目的:
保證整個應用中有且只有一個實例,即只允許我們創建一個對象,從而避免因爲創建了多個實例而造成資源的浪費,且多個實例由於多次調用容易導致結果出現錯誤的發生。
2思想:
(1)不允許其他程序用new對象。
(2)在該類中創建對象。
(3)對外提供一個可以讓其他程序獲取該對象的方法。即需分爲三步創建:
(1)私有化該類的構造函數。
(2)通過new在本類中創建一個本類對象。
(3)定義一個公有的方法,將在該類中所創建的對象返回。
3寫法:
(1)惡漢式:加載時初始化,能保證線程安全
public class Singleton{
private static Singleton instance = new Singleton();
public static getInstance(){
return instance;
}
}
訪問方式Singleton instance = Singleton.getInstance();
(2)懶漢式:不在加載時初始化,保證線程安全
public class Singleton1{
private static Singleton1 intence=null;
public static Singleton1 getInstence(){
if (intence == null){
synchronized(Singleton1.class){
if (intence == null){
instence = new Singleton1();
}
}
}
return instence;
}
}
訪問方式
Singleton1 instence = Singleton1.getInstance();
(3)內部類:不在加載時初始化,保證線程安全
public class Singleton2{
private static class InstanceHolder{//類進行初始化時,別的線程不可以進入
private stacic Singleton2 instance = new Singleton2();
}
public static Singleton2 getInstance(){
return InstanceHolder.instance;
}
}
訪問方式:Singleton2 instance = Singleton2.getInstance();