🎯 什麼情境該想到我

當某個東西整個程式從頭到尾只該存在一份、而且很多地方都要拿到「同一個」它——例如全域設定、連線池、日誌器;或你需要一個統一的協調中心時。

⚙️ 怎麼用(步驟 / 公式)

  1. 意圖:確保一個類別只有一個實例,並提供一個全域存取點。
  2. 主要參與者Singleton(把建構子設為私有、保存唯一實例、提供靜態 getInstance())。
  3. 做法:私有建構子擋掉外部 new+靜態 getInstance() 回傳唯一實例。
  4. 多執行緒要處理同步:可用 eager init(載入時就建好)或 double-checked locking(延遲建立又避免每次都加鎖)確保只會建一份。

🧪 我實際套用的紀錄

  • (待填)

⚠️ 注意 / 什麼時候不適用

  • 本質上是全域狀態:會造成隱性耦合(誰都能偷偷拿它、依賴關係看不出來)、單元測試難以替換與隔離、並發下若同步沒做好會出錯。
  • 能用依賴注入把「唯一實例」從外面傳進來,就別濫用 Singleton——同樣達成「只有一份」,但耦合更低、更好測。
  • 常被當成方便的全域變數濫用,是最容易被誤用的設計模式之一。

🔗 相關工具