大話設計模式--策略模式
阿新 • • 發佈:2018-11-16
策略模式(Strategy):定義了演算法家族,分別封裝起來,讓各個演算法之間可以相互替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。
/**
* 策略,定義計算報價演算法的介面
* */
public interface Strategy {
/**
* 計算應該報的價格
* @param goodPrice 商品銷售原價
* @return 計算出來的,應該給客戶的價格
*
*/
public double calcPrice(double goodPrice);
}
之後定義不同的具體實現演算法
public class NormalCustomerStrategy implements Strategy {
@Override
public double calcPrice(double goodPrice) {
System.out.println("對於新客戶或者是普通使用者,沒有折扣");
return goodPrice;
}
}
public class OldCustomerStrategy implements Strategy{ @Override public double calcPrice(double goodPrice) { /** * 具體演算法實現,為老客戶計算應報的價格 */ System.out.println("對於老客戶,統一折扣5%"); return (goodPrice * (1 - 0.05)); } }
public class LargerCustomerStrategy implements Strategy {
public double calcPrice(double goodsPrice) {
System.out.println("對於大客戶,統一折扣10%");
return goodsPrice*(1-0.1);
}
}
public class Price { /** * * 持續一個具體的策略物件 */ private Strategy strategy = null; public Price(Strategy astrategy) { this.strategy = astrategy; } public double qoute(double goodPrice) { return this.strategy.calcPrice(goodPrice); } }
同時策略模式的Strategy類層次為Context定義了一系列的可重用的的演算法或行為,繼承有助於析取出演算法中的公共功能。
另外一個策略模式的優點是簡化了單元測試,因為每個演算法都有自己的類,可以通過自己的介面單獨測試