- 單例模式要點:
- 一個類只需要一個實例化對象;
- 必須自行創建實例;
- 必須自行向整個系統提供這個實例
- 實現:
- 只提供私有構造方法;
- 有一個該類的靜態私有對象;
- 提供一個靜態公有方法用于創建、獲取靜態私有對象;
分析: - 私有構造方法->不能隨意創建實例;
- 靜態私有對象:確保只有一個實例對象
- 靜態公有方法->提供一個外部接口,可直接通過類名調用該方法,方法內部能直接調用靜態對象;
- 餓漢式實現方法:在創建類時實例化
public class SingletonOne{private SingletonOne(){}private static SingletonOne instance = new SingletonOne();public static SingletonOne getInstance(){return instance;}
}
- 懶漢式實現方法:靜態公有方法中實例化
public class SingletonTwo{private SingletonOne(){}private static SingletonTwo instance = null;public static SingletonOne getInstance(){if(instance==null) instance = new SingletonTwo();return instance;}
}
- 餓漢式 vs 懶漢式
單例模式的實現方法 | 實例化對象的時間 | 空間特點 | 時間特點 | 線程安全 |
---|
餓漢式 | 在類加載時候完成 | 空間占用時間長 | 在第一次使用時加載速度快 | 線程安全 |
懶漢式 | 在第一次調用共有方法時完成 | 不會造成內存空間浪費 | 在第一次使用時加載時間相對慢 | 線程不安全 |