單例模式
閱讀設定

單例模式(單例意即單一實例;參見英文:singleton)係軟件設計模式一種,物件導向編程會用到。用單例模式,意思係話某個類別(class)只得一個實例,一般會將製作實例嘅程序設做 private
(私有),簡單講即係用家唔能夠隨便建立新實例;例如想像喺個程式開頭,定義數據庫呢個類別,然後成個程式淨係得一個數據庫嘅實例,而且個建構子係私有嘅,用家冇得隨意建立新嘅數據庫[1]。
概念
[編輯]單例模式(做嘅係)確保個類別淨係得一個實例,並且全局得一個接入點通向佢度。
呢種設計模式,可以確保某啲數值只有一個。
應用
[編輯]呢種模式相當有用,譬如喺遊戲編程中,遊戲製作者可以用單例模式嚟建立管理遊戲數據嘅物件,叫遊戲管理器[註 1],好似係以下噉嘅虛擬碼[3]:
類 GameManager: 私有變數 唯一實例 = 無 私有變數 已初始化 = 假 方法 取得實例(): 如果 唯一實例 係 無: 唯一實例 = 新 GameManager() 返回 唯一實例 私有 建構子(): 如果 已初始化 係 真: 乜都唔做,直接走 gameState =「主選單」 分數 = 0 已初始化 = 真 方法 開始遊戲(): gameState =「遊戲進行中」 分數 = 0 輸出「遊戲開始!」 方法 結束遊戲(): gameState =「遊戲完咗」 輸出「遊戲結束!最終分數係:」+ 分數 方法 加分(分數值): 分數 += 分數值 輸出「而家分數係:」+ 分數
好似噉嘅遊戲管理器如果無端端多咗一嚿,會引致好多問題-例如想像冇用單例模式,遊戲程式行行吓多咗一個遊戲管理器出嚟,兩個管理器各自噉計算玩家攞到幾多分,最後遊戲入便有兩個唔同嘅玩家分數。因此,噉嘅物件就啱晒用單例模式[4]。
睇埋
[編輯]註釋
[編輯]- ↑ 英文中好多時會叫
GameManager
或者類似嘅名。
引咗
[編輯]- ↑ 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) - ↑ [1],原句:"The Singleton Method Design Pattern ensures a class has only one instance and provides a global access point to it."
- ↑ Implementing a game manager using the Singleton pattern | Unity. Medium.
- ↑ Nystrom, R. (2014). Game programming patterns. Genever Benning. Singleton