1.定義#
確保某個類只有一個實例抗碰,而且自行實例化并向整個系統(tǒng)提供這個實例骡湖。
單例模式是通過私有化構造函數實現的炼蛤,私有化構造函數的類不能通過關鍵字new來創(chuàng)建,但是可以通過clone和反射機制創(chuàng)建乌奇。
2.類圖#
3.實現#
3.1單例類##
public class Singleton
{
private static final Singleton singleton = new Singleton();
//因為需要考慮高并發(fā)下的同步問題,所以在類初始化時生成該對象眯娱。
private Singleton(){
//私有化構造函數
}
public static Singleton getSingleton(){
return singleton();
//獲得單例對象
}
public static void echo(){
//具體的業(yè)務邏輯
}
}
4.單例類使用場景#
整個項目中需要一個共享訪問點或共享數據礁苗;
創(chuàng)建一個對象需要消耗大量資源;
需要定義大量的靜態(tài)常量和靜態(tài)方法的環(huán)境徙缴。
5.擴展 多例模式#
使用ArrayList記錄多過類的靜態(tài)變量试伙,在static靜態(tài)代碼塊初始化。
public class Mutilton{
private static int max ton = 2;
private static ArrayList<Mutilton> mutiltonList = new ArrayList<Mutilton>();
static{
for(int i = 0; i < ton; i++){
mutiltonList.add(new Mutilton());
}
}
private Mutilton(){};
private Mutilton(String name){};
public static Mutilton getInstance(int id){
return mutiltonList.get(id);
}
public static void echo(){
//具體方法
};
}