策略模式(Strategy Pattern)js範例

於js與vue中的實踐

Jia
Jan 28, 2023

策略模式是一種設計模式,它定義了一組算法,並將每一個算法封裝起來,使它們可以相互替換。這樣程序在運行時可以根據需要來選擇不同的算法。策略模式使得算法可以獨立於使用它的客戶而變化。 — chat GPT

對我來說,策略模式我認為最重要的部分,就是算法可獨立於他的客戶(這邊的客戶代表調用此算法的某個模組或方法或類別)。獨立的好處代表一但算法有更新,算法有新增,算法有刪除,程式碼部分僅更新算法寫法就好,客戶都不需要進行修改。這樣的好處在於好擴充與好維護。

js中的實踐

js 中可替代部分ifelse 或 switch 寫法,皆以印射方式實現策略模式。

以下是一隻產生相對應訊息類別的function,參數為訊息類別,回傳對應訊息類別物件。

此時運用策略模式精神,將算法獨立於客戶端,此時的客戶端就是getMessage此函數。

此時就將策略與客戶(getMessage)隔離出來,此時策略的實作與客戶以不相干,客戶僅專注於調用,而實作交予策略決定,此方法的好處

  1. 符合單一職責原則:客戶僅專注於調用策略,策略的新增刪除修改僅在策略實踐。
  2. 符合開放封閉原則:無須對客戶端進行修改就能新增策略。

Vue中的實踐

vue中template動態組件常用is props做動態組建的切換以代替使用ifelse,因此每個組件有各自bind所要綁定的props與on事件,也可利物件包裝進行策略模式的實踐。以下是簡單範例

此寫法的壞處在於,只要有新增訊息類別,模板要改,相對應的策略要要新增於script中,因此也可利用測略並搭被is v-bind on關鍵字搭配策略包裝起來。

Refrence

首頁

--

--

Jia

看一次不懂 就看兩次吧。每一天努力一點,不知不覺就會成為想像中的樣子的。 like60955@gmail.com