做者按:《天天一個設計模式》旨在初步領會設計模式的精髓,目前採用
javascript
(靠這吃飯)和python
(純粹喜歡)兩種語言實現。誠然,每種設計模式都有多種實現方式,但此小冊只記錄最直截了當的實現方式 :)javascript
策略模式定義:就是可以把一系列「可互換的」算法封裝起來,並根據用戶需求來選擇其中一種。java
策略模式實現的核心就是:將算法的使用和算法的實現分離。算法的實現交給策略類。算法的使用交給環境類,環境類會根據不一樣的狀況選擇合適的算法。python
在使用策略模式的時候,須要瞭解全部的「策略」(strategy)之間的異同點,才能選擇合適的「策略」進行調用。git
class Stragegy(): # 子類必須實現 interface 方法 def interface(self): raise NotImplementedError() # 策略A class StragegyA(): def interface(self): print("This is stragegy A") # 策略B class StragegyB(): def interface(self): print("This is stragegy B") # 環境類:根據用戶傳來的不一樣的策略進行實例化,並調用相關算法 class Context(): def __init__(self, stragegy): self.__stragegy = stragegy() # 更新策略 def update_stragegy(self, stragegy): self.__stragegy = stragegy() # 調用算法 def interface(self): return self.__stragegy.interface() if __name__ == "__main__": # 使用策略A的算法 cxt = Context( StragegyA ) cxt.interface() # 使用策略B的算法 cxt.update_stragegy( StragegyB ) cxt.interface()
// 策略類 const strategies = { A() { console.log("This is stragegy A"); }, B() { console.log("This is stragegy B"); } }; // 環境類 const context = name => { return strategies[name](); }; // 調用策略A context("A"); // 調用策略B context("B");