《游戲編程模式》筆記——單例模式
單例模式
單例模式就是說一個類有且只有一個對象。
這個類會把構造函數(shù)私有化,自己創(chuàng)建自己的實例,并提供給外部。
靜態(tài)的instance保存了類的實例,私有的構造函數(shù)保證了實例的唯一,Instance提供給了外部任意位置訪問實例的方式。
好處
節(jié)省了一點性能,如果沒有人用,就不會創(chuàng)建實例。
只在運行時實例化,相比靜態(tài)成員在main函數(shù)運行前的自動初始化,懶漢模式的延遲加載都會在運行后盡可能晚的初始化,使單例成員之間的相互依賴更加可靠。
可以被繼承,這使得單例模式的使用方式更加靈活一些。除了作為父類,讓子類更容易實現(xiàn)單例外,也可以在父類調用實例的時候根據(jù)情況返回不同的子類對象。
壞處
增加耦合,因為隨處都可以調用,單例類的使用可能會遍布整個項目的代碼。
懶加載可能會導致在不想要的地方增加性能消耗,懶加載的實例化的時間點是未知的,可能會在正在進行大量計算的時間點進行初始化,加重了性能消耗。
最后
不要濫用單例模式,考慮清楚是否需要單例類,有可能只需要靜態(tài)函數(shù)就能解決的問題,就不要做成單例模式了。
也可以嘗試合并單例類,將一些小的管理類歸屬到一個大的管理類中。
Mono單例
這是一個簡單的MonoBehaviour單例的父類。
私有化instance并且在Awake階段判斷是否已有實例,如果沒有實例,第一個實例就成為這個單例的唯一實例,并且場景切換時不銷毀。后續(xù)重復創(chuàng)建的實例都會銷毀自己保證實例的唯一性。
參考
《游戲編程模式》
標簽: