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

Read More »

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

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

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

Read More »

為 Unity 準備一個泛用的狀態模式 – prepare a State pattern for Unity

State pattern 是我使用次數最多的設計模式,在 Unity 遊戲的開發中被我用於 程式流程的控制、規則的彈性編輯、簡易 AI 的撰寫、腳色控制器 的設計等,是應用相當廣泛的模式。

因為次數太多了,索性事先設計好基本的類別,當需要的時候便可以隨時隨地使用 State pattern,本文便是藉機介紹了 State pattern 及我的通用作法。

Read More »

應用 Singleton pattern 及 Unity Component 做系統拆分與管理 – Dividing your game system in unity.

在使用 Unity 開發遊戲的時候,為了實現各種功能,往往會不斷衍伸出一個又一個的系統,分別執掌不同的任務,可能是為了管理 UI 介面,也可能是為了建立連線,又或者是為了管理存檔。一個個的系統往往又為了方便而採用 Singleton pattern,或者互相注入,最後的結果就是系統之間的關係複雜,程式碼不易維護及重複使用。

於是乎我就一直思考著如何將一個巨大的系統架構,拆分成一個個獨立且靈活的小系統,就像電腦與周邊設備可以用 USB 輕易連接與斷開,我也希望我所開發的一個個系統,可以自由自在地安置在不同的開發專案之中。

如今這是我的初步成果,一套用於拆分以及管理各個子系統的架構:

gamesystemmanager

Read More »

學習設計模式的感想 – what benefits I get after studying design pattern

接觸設計模式的時間說長不長說短不短,但自從接觸了之後,才發現不管網路或者開發者社群,時不時都會有人提出 如何學習設計模式 的疑問。對於只是聽聞 設計模式 這個名稱,並被灌輸這個很重要,必須去學的想法的人,設計模式可能就像神祕學一般難易入門。

其實設計模式沒有這麼神奇與強大,只要累積一定的程式開發經驗之後,設計模式的想法基礎自然會逐漸被你聽聞或者吸收 (頓悟)。所謂的學習設計模式,只不過是強行頓悟的一個過程,像是打坐或冥想一般。

這篇文章是我接觸設計模式後的想法彙整,且提到了些關於學習過程的想法,希望可以幫到想接觸的人。

Read More »

初探 23種 設計模式 – when I first time use design pattern

幾個月前我讀了本關於在遊戲開發應用設計模式的書 <設計模式與遊戲開發的完美結合>,這是我第一次接觸 design pattern 設計模式 (求學期間還真沒聽過),才看了前幾章,我就想:這是甚麼!原來有這麼厲害的東西啊!

全書閱畢後,也嘗試實踐於我的專案之中,受益良多。不過也發現我對 設計模式 的熟悉度與瞭解還不夠充分,無法隨心所欲的發揮它的效用,於是又有了第二本書 <設計模式的解析與活用> 正要閱讀。在仔細閱讀這本新書之前,我回想了在這幾個月我實踐了多少設計模式,做下筆記,也算是第一篇書本的讀後心得。

Read More »

物件導向中常見的幾個設計原則 – Some Principle of Object Oriented Design

隨著參與大型專案的開發次數越來越多,對維護與穩定的要求越來越高,我不斷地感受到,改變一下程式的設計方式或許不影響程式功能,但是在未來修改或擴增功能時卻會變得更加容易。甚至好的設計之下,可以將部分的程式碼作點修改,就能適用於不同的專案,大大地節約開發所需要耗費的時間跟心力。

針對於好的設計,最近藉由一本書在學習設計模式,書中有一小節簡短帶過了一些關於進行物件導向開發時,可以讓開發或者維護更容易的一些設計原則。

雖然只是短短一小節,但是就讓我體會到站在巨人肩膀上的感覺。過去為了讓自己的程式有著上述容易維護與可重複使用的優點,往往會花上許多時間去反覆思考,但原來早就有前人歸納出幾個原則可以作為設計的大方向了,我只是再次考慮了相同的問題而已。

這些原則不能說是絕對的,但是如果在這些原則所指名的方向上思考,可以確實的讓人少走上許多冤枉路。上網特別研究了在書中提到的幾項設計原則之後,留下了此篇紀錄。(六項原則:SRP、OCP、LSP、ISP、DIP、LKP)

Read More »