1.什么是單例模式
確保某一個類在整個項目中只有一個實例,並且自行創建實例化對象,並向整個系統提供這個實例。
2.單例模式通用類圖
1.單例模式通過將構造函數設置為私有,來限制外部實例話對象。
2.提供一個getInstanse接口返回內部創建的實例對象。
類圖如下:

3.單例模式的幾種實現方法
方法一:餓漢模式
單例模式實現方式有多種,其中比較簡單的實現方式是直接定義一個private的屬性,並直接初始化。相關實現如下:
public class SingletonPattern {
private static final SingletonPattern singletonPattern = new SingletonPattern();
private SingletonPattern(){
}
public static SingletonPattern getInstance(){
return singletonPattern;
}
}
這種方法被稱為餓漢模式,即不管有沒有地方需要獲取實例對象,都在類加載的時候直接實例話對象出來。此中方式類加載比較慢,但是獲取實例對象比較快。
方法二:懶漢模式
另外一種實現方式被稱為懶漢模式,即在第一次調用getInstance方法的時候才會創建實例話對象。實現方式如下:
public class SingletonPattern2 {
private static SingletonPattern2 singletonPattern = null;
private SingletonPattern2(){
}
public static SingletonPattern2 getInstance(){
if (singletonPattern == null) {
singletonPattern = new SingletonPattern2();
}
return singletonPattern;
}
}
此種實現方式會有線程安全問題,即在getInstance中做了先檢查再操作,下面是對此問題的一種解決方案:
public class SingletonPattern2 {
private static SingletonPattern2 singletonPattern = null;
private SingletonPattern2() {
}
public static synchronized SingletonPattern2 getInstance() {
if (singletonPattern == null) {
singletonPattern = new SingletonPattern2();
}
return singletonPattern;
}
}
此種解決方式是在getInstance方法加了同步操作。
