1.什么是-策略設計模式
2.策略設計模式的優缺點
1.1優點
1.1.1.可以動態的改變對象的行為
1.1.2.分離業務邏輯實現和需求?
1.2缺點
1.2.1.客戶端必須知道所有的策略類,并自行決定使用哪一個策略類
1.3.2.策略模式將造成產生很多策略類
2.設計模式示例
2.1.示例背景
這里的示例是以小明和女朋友出去旅游選擇交通工具做背景,之前設計模式職責鏈的時候小明已經請假相親,結婚啥的都已經做完了,結完婚是不是該出去度蜜月了。一天小明決定去馬爾代夫度蜜月,然后選擇交通方式的時候犯愁了,小明是一位選擇性強迫癥的人,他在考慮是坐汽車還是火車還是飛機呢。他決定吧這三個想法告訴他的老婆小紅,讓小紅來決定(Context類來充當這個角色)。三個交通工具類分別是:Aircraft-飛機,Automobile-汽車,Train-火車,每一種交通工具的最終目的都是為了出行,所以定義一個抽象類Travel?并定義抽象方法TravelInterface讓三個交通工具實現該方法
2.2.代碼區域
2.2.1.創建抽象類Travel 定義抽象方法
/*** 出行抽象類*/ public abstract class Travel {/*** 出行抽象的公共接口方法*/public abstract void TravelInterface(); }
2.2.2.創建火車類并實現抽象Travel?類
/*** 火車類*/ public class Train extends Travel {@Overridepublic void TravelInterface() {System.out.println("我選擇乘坐火車去旅游");} }
2.2.3.創建汽車類并實現抽象Travel?類
/*** 汽車類*/ public class Automobile extends Travel {@Overridepublic void TravelInterface() {System.out.println("我選擇乘坐汽車去旅游");} }
2.2.4.創建飛機類并實現抽象Travel?類
/*** 飛機類*/ public class Aircraft extends Travel {@Overridepublic void TravelInterface() {System.out.println("我選擇乘坐飛機去旅游");} }
2.2.4.創建實現抽象出行的實現類-小明的媳婦
/*** 控制中心*/ public class Context {public void setStrategy(Travel strategy) {this.strategy = strategy;}private Travel strategy;public Context(Travel strategy) {this.strategy = strategy;}public void TravelInterface(){this.strategy.TravelInterface();} }
2.2.5.創建小明測試類
/*** 出行選擇對應的出行方式*/ public class TourismTest {public static void main(String args[]) {Context context=null;context=new Context(new Aircraft());/*通過傳遞某個出行對象來決定真正出行的交通工具*/context.TravelInterface();context=new Context(new Train());context.TravelInterface();context=new Context(new Automobile());context.TravelInterface();} }
執行思路總結:從實例中可以看出來優缺點的確很明顯,本身出行的交通工具都是可以劃分為交通工具類的,只是動作方法實現不同,這也就是缺點策略模式將造成產生很多策略類。有沒有發現策略模式和職責鏈模式有幾分相似之處。這里小明發起請求最終再交給小紅來實現,小紅就是Context 這個類。
?