[C#/Unity] 這不叫 Singleton,叫 Service Locator – Practice of Service Locator

過去在《[C#/Unity] 更多 Singleton – More Singleton in Unity》這篇文章中,實作了一個名為 Singleton manager 的物件來做 Singleton 的註冊與使用。

但最近在研讀 相依性注入 (Dependency Injection) 相關文章時,才發現有個叫做 Service Locator 的設計模式,基本上就是我過去所實作的 Singleton manager。再加上一些關於抽象化的觀念又比當初更成熟了,因此便想趁機改善當初的設計,同時正名為 Service Locator

gamesystemmanager

(概念相似所以就直接借用舊圖片作為封面)

閱讀更多»

廣告

[C#/Unity] 回顧所使用過的 Singleton 實作方式 – Difference of Four Singleton practicing

Singleton 是個充滿爭論的設計模式,從某些角度來看,Singleton 並不完全符合物件導向設計原則的所有理念,但是 Singleton 又某種程度上的不易被取代。所以一般來說的建議是:少用、小心地用。

過去我曾設計兩套實作方式,企圖用集合管理的方式,完全取代單一 Singleton 的使用:

不過最近我又把單一 Singleton 撿回來使用了,並回顧了我所遭遇過的使用情境,對何時該用何種 Singleton 實作,立下一套主觀原則。

閱讀更多»

C# 上 Observer pattern 的實作差異 – observer pattern on C#

前陣子有注意到,大多數的書籍或網站資料在介紹 設計模式(Design Pattern) 時,往往所採用的實作方式都是以 C++ 或 JAVA 為實作基礎,甚至在 Unity 為主題的書籍上,也沒有針對 C# 做進一步說明。

事實上作為一個不斷擴充版本及功能的語言,.NET 的 C# 的使用上提供了更多樣化的類別或介面,可以用不太一樣的方式來實作設計模式,妥善的應用 C# 所帶來的便利。

最明顯的例子,就是利用 C# 的 delegate,可以更加方便的實作 觀察者模式(Observer pattern),甚至讓應用上更加靈活。本文記錄了三種作法可讓大家比較參考:

  • 純 class
  • Delegate (Action)
  • Event & EventHandler

閱讀更多»

[C#/Unity] 更多 Singleton – More Singleton in Unity

在舊文章 應用 Singleton pattern 及 Unity Component 做系統拆分與管理 – Dividing your game system in unity. 中,我開發了一套架構來作為單一 Singleton 的替代方案,用於統一管理會在整個 Unity 專案中使用到的遊戲功能系統。

該篇文章中的 GameSystemMono (即仿 Singlton 的組件) 繼承了 MonoBehaviour,來實現一些設計上的想法。不過帶來優點的同時也產生了一些限制,經過與他人的討論後,認為還是需要一個不依賴 MonoBehaviour 的 Singleton 組件方案,兩者互相補足,而這個想法終於在最近進行了實作。

閱讀更多»