Java设计模式之策略设计模式
1.什么是-策略設計模式
在軟件開發中常常遇到這種情況,實現某一個功能有多種算法或者策略,我們可以根據環境或者條件的不同選擇不同的算法或者策略來完成該功能。如查找、排序等,一種常用的方法是硬編碼(Hard Coding)在一個類中,如需要提供多種查找算法,可以將這些算法寫到一個類中,在該類中提供多個方法,每一個方法對應一個具體的查找算法;當然也可以將這些查找算法封裝在一個統一的方法中,通過if…else…或者case等條件判斷語句來進行選擇。 這兩種實現方法我們都可以稱之為硬編碼,如果需要增加一種新的查找算法,需要修改封裝算法類的源代碼;更換查找算法,也需要修改客戶端調用代碼。在這個算法類中封裝了大量查找算法,該類代碼將較復雜,維護較為困難。如果我們將這些策略包含在客戶端,這種做法更不可取,將導致客戶端程序龐大而且難以維護,如果存在大量可供選擇的算法時問題將變得更加嚴重。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 這個類。
?
轉載于:https://www.cnblogs.com/david97/p/8081338.html
總結
以上是生活随笔為你收集整理的Java设计模式之策略设计模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue之安装配置
- 下一篇: World Token钱包官网骗局模式,