設計模式——策略模式

什麼是策略模式?策略模式屬於對象的行為模式。其用意是針對一組演算法,將每一個演算法封裝到具有共同介面的獨立的類中,從而使得它們可以相互替換。策略模式使得演算法可以在不影響到客戶端的情況下發生變化。舉個例子?
出行模式
常規程式碼實現方式
// 第一種 switch("出行方式") { case "高鐵": { "坐高鐵咯!"; break; } case "飛機": { "坐飛機咯!"; break; } case "火車": { "坐火車咯!"; break; } case "汽車": { "坐汽車咯!"; break; } default: { "巴拉巴拉巴拉"; break; } } // 第二種 if("出行方式" == "高鐵") { "坐高鐵咯!"; } if("出行方式" == "飛機") { "坐飛機咯!"; } if("出行方式" == "火車") { "坐火車咯!"; } if("出行方式" == "汽車") { "坐汽車咯!"; }
運用策略模式實現
1)寫個介面
interface TravelOutside { void modeOfTravel(); }
2)介面實現
// 高鐵 public class HighSpeedRailway implements TravelOutside { @Override public void modeOfTravel() { System.err.println("高鐵"); } } // 飛機 public class Aircraft implements TravelOutside { @Override public void modeOfTravel() { System.err.println("飛機"); } } // 火車 public class Train implements TravelOutside { @Override public void modeOfTravel() { System.err.println("火車"); } } // 汽車 public class Automobile implements TravelOutside { @Override public void modeOfTravel() { System.err.println("汽車"); } }
3)抽象類實現
public class Travel { // 出行方式介面 TravelOutside travelOutside; // 設置出行方式 public void setTravelOutside(TravelOutside travelOutside) { this.travelOutside = travelOutside; } // 選擇出行方式 public void travelStyle() { travelOutside.modeOfTravel(); } }
4)使用
public static void main(String[] args) { Travel travel = new Travel(); travel.setTravelOutside(new Aircraft()); travel.travelStyle(); }
控制台輸出結果
控制台輸出結果
聊聊
策略模式設計三個角色:
環境角色(Context):定義環境角色,負責和具體的策略類交互,內部持有一個策略類的引用,給客戶端調用;
抽象策略角色(Strategy):定義抽象策略角色,通常情況下使用介面或者抽象類去實現;
具體策略(ConcreteStrategy)角色:定義具體策略角色(在定義飛機、高鐵、火車、汽車具體的策略)。