策略模式應該是Java設計模式中最簡單的一種模式,
它的核心思想是,一個類的行為可以在運行時動態改變,有不同的實現邏輯。
其實具體的說,它也是基於面向接口編程的思想,通過定義不同的實現類邏輯來做到的。
策略模式接口定義
比方說現在需要一個計算邏輯,對兩個輸入的數進行某種運算,
這裡可以定義接口為:
策略模式實現
現在如果需要實現加法和算法,只需要定義兩個對應的類,實現接口就可以
最後一步,策略模式需要一個策略類,
劃重點
到這裡你可能會有些疑問,策略模式跟簡單工廠模式有什麼區別?
都是定義個接口,往一個Context/Factory類裡傳東西,然後執行抽象好的接口,
從代碼層次來說一模一樣啊?
這裡來回顧下之前說的工廠模式,
設計模式之工廠模式
這裡重點關注一個地方,
我們往 Context/Factory 的構造方法裡穿的東西不同
· 策略模式
我們傳的是構造好的執行對象, AddCaculator()
· 工廠模式
這裡傳的是不是對象,而是定義好的參數,比如 "add"
<code>他倆的區別在於,策略模式需要調用者創建好執行邏輯的對象,而工廠模式只需要告訴工廠我們要創建什麼。/<code>
這麼說可能不夠具體,你可以這麼想象,
我們去了一個咖啡廳,想喝一杯咖啡,
策略模式的咖啡廳會說
想喝卡布奇諾還是拿鐵,自己調好咖啡和奶的比例拿給他,他幫你在咖啡機上磨好裝杯子裡給你
工廠模式的咖啡廳會說
跟他說要卡布奇諾還是拿鐵就行,你不需要關心咖啡豆的比例和製作過程,他幫你做好裝杯子裡給你
總結
策略模式跟工廠模式其實思想非常接近,
都是通過接口來去耦合,
而兩者的區別也比較容易理解,
策略模式側重於讓調用者控制邏輯的實現,
工廠模式則側重於讓調用者不關心具體的邏輯,只關心需要用什麼東西。
閱讀更多 Java高併發框架 的文章