首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Effective Java 學習筆記(二):以私有建構子強化 Singleton 單例模式

     編輯:Java 程式設計入門

Singleton 模式核心價值

  • 確保 JVM 中某類別僅存在一個實例
  • 適用場景:資料庫連線池、執行緒池、計數器、狀態倉庫、工具類
  • 優勢:節省記憶體、利於 GC、可狀態化(如論壇計數器)或無狀態化(工具方法)

兩種經典實作比較

寫法一:public static final 欄位

public class Elvis {
    public static final Elvis INSTANCE = new Elvis();
    private Elvis() { /* ... */ }
    public static void main(String[] args) {
        System.out.println(Elvis.INSTANCE);
    }
}
  • 優點:API 明確宣告單例、簡單直接、序列化安全
  • 缺點:無法延遲初始化、無法依情境切換實例策略

寫法二:static factory 方法

public class Elvis {
    private static final Elvis INSTANCE = new Elvis();
    private Elvis() { /* ... */ }
    public static Elvis getInstance() { return INSTANCE; }
    // 多執行緒環境建議加 synchronized
    public static synchronized Elvis getInstance() { return INSTANCE; }
    public static void main(String[] args) {
        System.out.println(Elvis.getInstance());
    }
}
  • 優點:API 彈性大,未來可改為每執行緒一實例、延遲初始化、依配置切換實作
  • 缺點:稍顯冗長

選擇指南

確定永遠不需變更策略 → 寫法一
需要彈性、可測試、可擴展 → 寫法二(並加 synchronized 保執行緒安全)

補充:類別載入器與 Singleton

工廠模式中的 Class Loader 常以 Singleton 實作,因載入的類別本質也是受限資源。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved