策略模式(Strategy Pattern)js範例
策略模式是一種設計模式,它定義了一組算法,並將每一個算法封裝起來,使它們可以相互替換。這樣程序在運行時可以根據需要來選擇不同的算法。策略模式使得算法可以獨立於使用它的客戶而變化。 — chat GPT
對我來說,策略模式我認為最重要的部分,就是算法可獨立於他的客戶(這邊的客戶代表調用此算法的某個模組或方法或類別)。獨立的好處代表一但算法有更新,算法有新增,算法有刪除,程式碼部分僅更新算法寫法就好,客戶都不需要進行修改。這樣的好處在於好擴充與好維護。
js中的實踐
js 中可替代部分ifelse 或 switch 寫法,皆以印射方式實現策略模式。
以下是一隻產生相對應訊息類別的function,參數為訊息類別,回傳對應訊息類別物件。
此時運用策略模式精神,將算法獨立於客戶端,此時的客戶端就是getMessage此函數。
此時就將策略與客戶(getMessage)隔離出來,此時策略的實作與客戶以不相干,客戶僅專注於調用,而實作交予策略決定,此方法的好處
- 符合單一職責原則:客戶僅專注於調用策略,策略的新增刪除修改僅在策略實踐。
- 符合開放封閉原則:無須對客戶端進行修改就能新增策略。
Vue中的實踐
vue中template動態組件常用is props做動態組建的切換以代替使用ifelse,因此每個組件有各自bind所要綁定的props與on事件,也可利物件包裝進行策略模式的實踐。以下是簡單範例
此寫法的壞處在於,只要有新增訊息類別,模板要改,相對應的策略要要新增於script中,因此也可利用測略並搭被is v-bind on關鍵字搭配策略包裝起來。