iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
自我挑戰組

深入淺出設計模式 (Head First Design Pattern) - 重點整理及範例分享系列 第 17

[深入淺出設計模式] Ch5 The Singleton Pattern (1) - 【單例模式】

  • 分享至 

  • xImage
  •  

Singleton Pattern 單例模式

在特定情況下,我們會希望某一些類別的物件只有一個,通常會用global variable 讓它是靜態變數。(例如設計一個學校系統,這個系統只有一個註冊單位可以合法讓學生註冊,我們就必須確保註冊單位這個物件在程式中只能有一個)。

這個做法的缺點就是會在程式剛開始就宣告這個變數,也會佔用記憶體位置,即使我們可能還沒用到它,或是已經用完了,還是得放著程式結束。如果程式剛好有很多靜態變數的需求,就容易拖垮程式的執行效率或是浪費記憶體容量。

單例模式可以讓我們在需要的時候宣告變數,不需要用靜態方式宣告,而且還能確保整個程式不會不小心出現另一個一樣的變數,一樣可以讓我們在程式運行的任何時候去使用該變數。

將建構子設成 private,就無法從外部重複建構這個物件,getInstance()可以確認物件是否為空值,去決定要不要建立。

public class Singleton {
    private static Singleton uniqueInstance;
    // other useful instance variables here
    
    private Singleton() {};
    
    public static Singleton getInstance() { 
        if (uniqueInstance == null) {
            uniqueInstance = new Singleton(); 
        }
        return uniqueInstance; 
    }
    // other useful methods here 
}

參考資料:

  1. 《深入淺出設計模式 (Head First Design Patterns) 》
  2. 書中官方程式碼傳送門

Disclaimer
因為讀的是原文版,所以難免會有翻譯詞不達意或是專有名詞上的差異,有錯誤的話歡迎在留言區一起交流!


上一篇
[深入淺出設計模式] Ch4 The Factory Pattern (6) - 【設計原則複習】
下一篇
[深入淺出設計模式] Ch5 The Singleton Pattern (2) - 【單例模式】多執行緒處理 方式 (已更新)
系列文
深入淺出設計模式 (Head First Design Pattern) - 重點整理及範例分享35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言