package com;
public interface Strategy {
double caclPrice(double goodsPrice);
}
package com.impl;
import com.Strategy;
public class StrategyA implements Strategy {
@Override
public double caclPrice(double goodsPrice) {
System.out.println("普通客戶沒有折扣哦!");
return goodsPrice;
}
}
package com.impl;
import com.Strategy;
public class StrategyB implements Strategy {
@Override
public double caclPrice(double goodsPrice) {
System.out.println("VIP客戶可以打8折哦!");
return goodsPrice * (1 - 0.2);
}
}
package com;
import com.Strategy;
public class Context {
private Strategy strategy;
public Strategy getStrategy() {
return strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public double caclPrice(double goodsPrice){
return strategy.caclPrice(goodsPrice);
}
}
import com.Context;
import com.impl.StrategyA;
import com.impl.StrategyB;
public class Client {
public static void main(String[] args) {
Context context = new Context();
context.setStrategy(new StrategyA());
System.out.println(context.caclPrice(100));
context.setStrategy(new StrategyB());
System.out.println(context.caclPrice(100));
}
}
策略算法是相同行爲的不同實現。
如果沒有上下文,那麼就需要客戶端來直接與具體的策略交互,尤其是當需要提供一些公共功能,或者相關狀態存儲的時候,會大大增加客戶端使用的難度。因此,引入上下文還是很必要的,有了上下文,這些工作就由上下文來完成了,客戶端只需要與上下文交互就可以了,這樣會讓整個設計模式更獨立、更有整體性,也讓客戶端更簡單。