2019年12月1日 星期日

[Design Pattern] 策略模式(Strategy Pattern) in C#

前言:
一年前在實作資料處理程式時,不經意的用到該模式,
其實策略模式就是一種Dependency Injection的簡單例子,
因此,實務上很容易使用到。


說明:
類別圖如下:


可以看到Calculator是依賴ICal這個介面,
而實作ICal的類別,就是實作所謂的策略,
例如,將公分數值轉成公尺。
而Calculator可選擇要使用哪個策略,就可得到計算後的結果。


簡單實作如下:








但上面的做法,還可以再改善,將選擇策略的部分移到CalContext,
在建構CalContext時,傳入策略的名稱,就能在GetResult方法內再建立具體策略,
讓外部使用者操作更簡化,如下圖。