單例模式的定義
單例模式(Singleton Pattern)是一種創建型設計模式,確保一個類只有一個實例,并提供一個全局訪問點。常用于需要控制資源或共享狀態的場景,例如數據庫連接、日志記錄器等
單例模式的實現方式
餓漢式(Eager Initialization)
在類加載時直接創建實例,線程安全但可能造成資源浪費
public class EagerSingleton {private static final EagerSingleton instance = new EagerSingleton();private EagerSingleton() {}public static EagerSingleton getInstance() {return instance;}
}
懶漢式(Lazy Initialization)
在第一次調用時創建實例,需加鎖保證線程安全
public class LazySingleton {private static LazySingleton instance;private LazySingleton() {}public static synchronized LazySingleton getInstance() {if (instance == null) {instance = new LazySingleton();}return instance;}
}
雙重檢查鎖(Double-Checked Locking)
減少同步開銷,僅在實例未初始化時加鎖
public class DoubleCheckedSingleton {private static volatile DoubleCheckedSingleton instance;private DoubleCheckedSingleton() {}public static DoubleCheckedSingleton getInstance() {if (instance == null) {synchronized (DoubleCheckedSingleton.class) {if (instance == null) {instance = new DoubleCheckedSingleton();}}}return instance;}
}
靜態內部類(Static Nested Class)
利用類加載機制保證線程安全,且延遲初始化
public class StaticNestedSingleton {private StaticNestedSingleton() {}private static class Holder {static final StaticNestedSingleton INSTANCE = new StaticNestedSingleton();}public static StaticNestedSingleton getInstance() {return Holder.INSTANCE;}
}