1.在策略模式中,一個行爲或其算法能夠在運行時更改,這種類型的設計模式屬於策略模式。 2.在策略模式中,咱們建立表示各類策略的對象和一個行爲隨着策略對象改變而改變的choose對象,策略對象改變choose對象的執行算法。 3.測試代碼 github.com/644968328/D…git
1.能夠動態的改變對象的行爲。 2.避免使用多重條件判斷。 3.擴展性好。github
1.多有的策略類都要對外暴露。 2.策略越多,類就越多。算法
1.若是一個系統裏面有許多類,他們之間的區別在於他們的行爲,那麼使用策略模式能夠動態的讓一個對象在許多行爲中選擇一種行爲。 2.一個系統須要動態的在幾種算法中選擇一種。 3.若是一個對象有不少行爲須要使用多重條件選擇語句來實現。設計模式
git想要出去旅遊,因而用策略模式制定了一個出行方案。bash
建立一個策略接口,裏面有一個出行方式的方法。markdown
/**
* 每一個策略都是一個可執行的算法,
* 可根據業務定製不一樣的算法類實現該接口
*/
public interface Strategy {
public String travelWay();
}
複製代碼
建立策略的具體實現類,把每種出行方式都封裝到類中。ide
/** * 飛機出行 */ public class PlaneStrategy implements Strategy { @Override public String travelWay() { return "乘坐飛機出行"; } } 複製代碼
/** * 火車出行 */ public class TrainStrategy implements Strategy { @Override public String travelWay() { return "乘坐火車出行"; } } 複製代碼
/** * 汽車出行 */ public class CarStrategy implements Strategy { @Override public String travelWay() { return "乘坐汽車出行"; } } 複製代碼
建立策略運行環境,至關於策略選擇器類,持有一個策略接口的引用。函數
/** * 此類至關於策略動態選擇器 */ public class Choose { private Strategy strategy; //構造函數放入要使用的策略 public Choose(Strategy strategy) { this.strategy = strategy; } public String travelWay() { return strategy.travelWay(); } } 複製代碼
建立demo運行oop
public class StrategyPatternDemo { public static void main(String[] args) { System.out.println("有一天git想要出去旅遊,因而他制定了一個路線"); Choose planStrategy = new Choose(new PlaneStrategy()), trainStrategy = new Choose(new TrainStrategy()), carStrategy = new Choose(new CarStrategy()); System.out.println("他打算先" + planStrategy.travelWay() + "先到上海遊玩"); System.out.println("而後在"+trainStrategy.travelWay()+"到杭州"); System.out.println("最後在"+carStrategy.travelWay()+"到賓館"); } } 複製代碼