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

Java 單例模式實戰:屬性管理器、Runtime 與 Toolkit 核心類別深度解析

     編輯:Java 相關知識

實用案例:屬性管理器

屬性檔案用於儲存系統配置,避免硬編碼導致每次修改需重新編譯。採用單例模式管理屬性檔案,確保全系統共用同一配置實例,並支援運行時熱加載更新。

核心設計:ConfigManager

  • 採用餓漢式單例,類別載入時即建立唯一實例。
  • 建構子私有,靜態工廠方法 getInstance() 提供全域存取點。
  • 每次讀取配置項前,自動檢查檔案最後修改時間;若檔案已更新,自動重新載入,確保配置與磁碟同步。
public final class ConfigManager {
    private static final String PFILE = System.getProperty("user.dir") + File.separator + "singleton.properties";
    private static final ConfigManager INSTANCE = new ConfigManager();
    private final File file;
    private long lastModified;
    private final Properties props = new Properties();

    private ConfigManager() {
        file = new File(PFILE);
        lastModified = file.lastModified();
        loadProperties();
    }

    public static ConfigManager getInstance() { return INSTANCE; }

    public Object getConfigItem(String name, Object defaultVal) {
        long current = file.lastModified();
        if (current > lastModified) loadProperties(); // 熱加載
        lastModified = current;
        Object val = props.getProperty(name);
        return val != null ? val : defaultVal;
    }
    // ... 省略 loadProperties 實作細節
}

呼叫範例

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line;
while (!(line = reader.readLine()).equals("quit")) {
    System.out.println(ConfigManager.getInstance().getConfigItem(line, "Not found."));
}

JDK 內建單例類別解析

java.lang.Runtime

每個 Java 應用程式僅有一個 Runtime 實例,透過 Runtime.getRuntime() 取得。常用於:執行外部命令、查詢記憶體資訊、觸發 GC、載入原生庫。

// 啟動記事本
Process proc = Runtime.getRuntime().exec("notepad.exe");
// Windows 下以關聯程式開啟文件
Process proc = Runtime.getRuntime().exec("cmd /c start MyDocument.doc");

java.beans.Introspector

JavaBean 自省機制的核心,BeanBox 等視覺化設計工具依賴它動態發現 Bean 的屬性、事件與方法。建構子私有,靜態工廠方法 getBeanInfo() 回傳單例實例。

Introspector 類別結構

java.awt.Toolkit

抽象類別,提供 getDefaultToolkit() 靜態同步方法回傳平台相關的具體實現。結合模板方法模式:工廠方法延遲到子類別實現,不同作業系統提供不同的 Toolkit 子類別。

值得注意的是:若子類別建構子為私有,則為標準單例;若為公開,則屬於「不完全單例」。

Toolkit 類別圖

javax.swing.TimerQueue

Swing 計時器內部使用的不完全單例,擁有公開建構子,詳見後續章節討論。

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