05.14 Java編程細節——什麼是策略模式

策略模式應該是Java設計模式中最簡單的一種模式,

它的核心思想是,一個類的行為可以在運行時動態改變,有不同的實現邏輯。

其實具體的說,它也是基於面向接口編程的思想,通過定義不同的實現類邏輯來做到的。

策略模式接口定義

比方說現在需要一個計算邏輯,對兩個輸入的數進行某種運算,

這裡可以定義接口為:

Java編程細節——什麼是策略模式

策略模式實現

現在如果需要實現加法和算法,只需要定義兩個對應的類,實現接口就可以

Java編程細節——什麼是策略模式

最後一步,策略模式需要一個策略類,

Java編程細節——什麼是策略模式

Java編程細節——什麼是策略模式

劃重點

到這裡你可能會有些疑問,策略模式跟簡單工廠模式有什麼區別?

都是定義個接口,往一個Context/Factory類裡傳東西,然後執行抽象好的接口,

從代碼層次來說一模一樣啊?

這裡來回顧下之前說的工廠模式,

設計模式之工廠模式

這裡重點關注一個地方,

我們往 Context/Factory 的構造方法裡穿的東西不同

· 策略模式

我們傳的是構造好的執行對象, AddCaculator()

· 工廠模式

這裡傳的是不是對象,而是定義好的參數,比如 "add"

<code>他倆的區別在於,策略模式需要調用者創建好執行邏輯的對象,而工廠模式只需要告訴工廠我們要創建什麼。/<code>

這麼說可能不夠具體,你可以這麼想象,

我們去了一個咖啡廳,想喝一杯咖啡,

策略模式的咖啡廳會說

想喝卡布奇諾還是拿鐵,自己調好咖啡和奶的比例拿給他,他幫你在咖啡機上磨好裝杯子裡給你

工廠模式的咖啡廳會說

跟他說要卡布奇諾還是拿鐵就行,你不需要關心咖啡豆的比例和製作過程,他幫你做好裝杯子裡給你

總結

策略模式跟工廠模式其實思想非常接近,

都是通過接口來去耦合,

而兩者的區別也比較容易理解,

策略模式側重於讓調用者控制邏輯的實現,

工廠模式則側重於讓調用者不關心具體的邏輯,只關心需要用什麼東西。

Java編程細節——什麼是策略模式


分享到:


相關文章: