介紹
單例模式(Singleton Pattern)是 Java 中最簡單的設(shè)計模式之一完丽。這種模式涉及到一個單一的類恋技,該類負(fù)責(zé)創(chuàng)建自己的對象,同時確保只有單個對象被創(chuàng)建逻族。這個類提供了一種訪問其唯一的對象的方式蜻底,可以直接訪問,不需要實例化該類的對象聘鳞。
注意
- 單例類只能有一個實例
- 自己創(chuàng)建自己的實例
- 給其他所有對象提供這種實例
意圖
保證一個類只有一個實例薄辅,并且全局可以訪問到它
主要解決
一個全局使用的類頻繁地創(chuàng)建與銷毀
關(guān)鍵代碼
private SingleObject(){}
構(gòu)造函數(shù)私有
如何解決
定義一個靜態(tài)方法getInstance判斷系統(tǒng)是否已經(jīng)有這個單例,如果有則返回抠璃,如果沒有則創(chuàng)建站楚。
實現(xiàn)
基本模型
單例模式的幾種實現(xiàn)形式
1.懶漢式
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
線程安全:
public class Singleton {
private static Singleton instance;
private Singleton (){}
public static synchronized Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
2.餓漢式
private static Singleton instance = new Singleton();
private Singleton (){}
public static Singleton getInstance() {
return instance;
}
}
3.登記式/靜態(tài)內(nèi)部類
public class Singleton {
private static class SingletonHolder {
private static final Singleton INSTANCE = new Singleton();
}
private Singleton (){}
public static final Singleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
4.枚舉
public enum Singleton {
INSTANCE;
public void whateverMethod() {
}
}
P.S.想了解如何實現(xiàn),可參考
Java利用枚舉實現(xiàn)單例
參考:菜鳥教程