策略模式的定義和使用場景
定義:策略模式定義了一系列的演算法,並將每一個演算法封裝起來,而且使他們可以相互替換,讓演算法獨立於使用它的客戶而獨立變化。
分析下定義,策略模式定義和封裝了一系列的演算法,它們是可以相互替換的,也就是說它們具有共性,而它們的共性就體現在策略介面的行為上,另外為了達到最後一句話的目的,也就是說讓演算法獨立於使用它的客戶而獨立變化,我們需要讓客戶端依賴於策略介面。
策略模式的使用場景:
1.針對同一型別問題的多種處理方式,僅僅是具體行為有差別時;
2.需要安全地封裝多種同一型別的操作時;
3.出現同一抽象類有多個子類,而又需要使用 if-else 或者 switch-case 來選擇具體子類時。
策略模式例子
出行旅遊:我們可以有幾個策略可以考慮:可以騎自行車,汽車,做火車,飛機。每個策略都可以得到相同的結果,但是它們使用了不同的資源。選擇策略的依據是費用,時間,使用工具還有每種方式的方便程度 。
具體的java程式碼實現
定義一個person類
package org.java.base.pattern.strategy;
public class StrategyPatternDemo {
public static void main(String[] args) {
Person person = new Person(new BicycleStrategy());
person.travel();
person.setStrategy(new AirPlanelStrategy());
person.travel();
person.setStrategy(new TrainStrategy());
person.travel();
}
}複製程式碼
定義旅行的介面類
package org.java.base.pattern.strategy;
public interface TravelStrategy {
public void travel();
}複製程式碼
實現具體的旅行方式-火車
package org.java.base.pattern.strategy;
public class TrainStrategy implements TravelStrategy {
@Override
public void travel() {
System.out.println("坐火車去旅行");
}
}複製程式碼
實現具體的旅行方式-飛機
package org.java.base.pattern.strategy;
public class AirPlanelStrategy implements TravelStrategy {
@Override
public void travel() {
System.out.println("坐飛機去旅遊");
}
}複製程式碼
實現具體的旅行方式-自行車
package org.java.base.pattern.strategy;
public class BicycleStrategy implements TravelStrategy {
@Override
public void travel() {
System.out.println("騎自行去旅行");
}
}複製程式碼
測試類
package org.java.base.pattern.strategy;
public class StrategyPatternDemo {
public static void main(String[] args) {
Person person = new Person(new BicycleStrategy());
person.travel();
person.setStrategy(new AirPlanelStrategy());
person.travel();
person.setStrategy(new TrainStrategy());
person.travel();
}
}複製程式碼
最後列印結果
騎自行去旅行
坐飛機去旅遊
坐火車去旅行複製程式碼