跳去內容

單例模式

出自維基百科,自由嘅百科全書
描述 singleton 嘅類別圖

單例模式單例意即單一實例;參見英文singleton)係軟件設計模式一種,物件導向編程會用到。用單例模式,意思係話某個類別(class)只得一個實例,一般會將製作實例嘅程序設做 private私有),簡單講即係用家唔能夠隨便建立新實例;例如想像喺個程式開頭,定義數據庫呢個類別,然後成個程式淨係得一個數據庫嘅實例,而且個建構子係私有嘅,用家冇得隨意建立新嘅數據庫[1]

概念

[編輯]

單例模式嘅定義,可以用以下句嘢概括[2]

單例模式(做嘅係)確保個類別淨係得一個實例,並且全局得一個接入點通向佢度。

呢種設計模式,可以確保某啲數值只有一個。

應用

[編輯]

呢種模式相當有用,譬如喺遊戲編程中,遊戲製作者可以用單例模式嚟建立管理遊戲數據嘅物件,叫遊戲管理器[註 1],好似係以下噉嘅虛擬碼[3]

 類 GameManager:
   私有變數 唯一實例 = 無
   私有變數 已初始化 = 假
   
   方法 取得實例():
       如果 唯一實例 係 無:
           唯一實例 = 新 GameManager()
       返回 唯一實例
   
   私有 建構子():
       如果 已初始化 係 真:
           乜都唔做,直接走
       gameState =「主選單」
       分數 = 0
       已初始化 = 真
   
   方法 開始遊戲():
       gameState =「遊戲進行中」
       分數 = 0
       輸出「遊戲開始!」
   
   方法 結束遊戲():
       gameState =「遊戲完咗」
       輸出「遊戲結束!最終分數係:」+ 分數
   
   方法 加分(分數值):
       分數 += 分數值
       輸出「而家分數係:」+ 分數

好似噉嘅遊戲管理器如果無端端多咗一嚿,會引致好多問題-例如想像冇用單例模式,遊戲程式行行吓多咗一個遊戲管理器出嚟,兩個管理器各自噉計算玩家攞到幾多分,最後遊戲入便有兩個唔同嘅玩家分數。因此,噉嘅物件就啱晒用單例模式[4]

睇埋

[編輯]

註釋

[編輯]
  1. 英文中好多時會叫 GameManager 或者類似嘅名。

引咗

[編輯]
  1. Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides (1994). Design Patterns: Elements of Reusable Object-Oriented Software. Addison Wesley. pp. 127ff. ISBN 0-201-63361-2.{{cite book}}: CS1 maint: multiple names: 作者名單 (link)
  2. [1],原句:"The Singleton Method Design Pattern ensures a class has only one instance and provides a global access point to it."
  3. Implementing a game manager using the Singleton pattern | Unity. Medium.
  4. Nystrom, R. (2014). Game programming patterns. Genever Benning. Singleton

外拎

[編輯]