Strategy Pattern - 練習

泰勞最近正在練習簡化程式碼,使自己的程式碼更容易閱讀與維護,在此簡單的分享一點研究成果。

<本人並非高手,若有錯誤或是更好之解決方法,煩請多多指教>

情境背景:
同樣的物件,依據不同條件,使用不同的方法執行。

例如:
加密字串,有3種Provider可以選擇,以前會直接想到使用if else或是switch。

我原本的作法:
拉了3個Button,都是加密,只是加密的方法不同,因此,程式碼重複性很高,若要新增其他方法,就要再多出好幾個Button。

後來,很意外的找到了一個我覺得不錯的方法,來重構我的程式碼,就是設計模式裡面提到的其中一種-Strategy Pattern「策略模式」。 

參考資料:
StackOverflow-Converting many if else statements to a cleaner approach
Design Patterns - Strategy Pattern
搞笑談軟工-重新整理Strategy Pattern

Strategy Pattern:  
A class behavior or its algorithm can be changed at run time. This type of design pattern comes under behavior pattern.

實作原理是將演算法封裝為物件,主程式只需透過Context去呼叫某個動作,而這個Context會依據你的需求(Strategy)來決定要使用那一個演算法來執行這個動作。

重新整理:

先定義一個Strategy介面(Interface)

建立一個Context類別作為中繼站。

建立實作Strategy介面的類別(n種方法就建立n個),必須覆寫(Override)Strategy介面所定義的抽象方法(Encrypt和Decrypt)

最後在主程式裡透過HashMap來呼叫相對應的方法。

到這裡大致上是完成了Strategy Pattern的模型

老實說,我現在還是個正在練習Design Pattern的新手,所以,我並不知道策略模式最適合的使用時機,待泰勞未來對於Design Pattern有更深入的了解,再來與大家分享研究結果囉!

留言

這個網誌中的熱門文章

Repo 實用指令

什麼是 Bootloader?

程式語言常用之符號與詞彙 - 中英文對照