策略模式對應於解決某一個問題的算法族,允許用戶從該算法族任選一個算法解決某一問題,同時可以方便地更換算法和增加新的算法。並且由客戶端決定調用哪個算法。常用場景,Spring框架Resource接口,資源訪問策略。
現在有一個應用場景,一個服裝廠的老闆對他的客戶根據情況進行不同的折扣,採用策略模式。
首先是策略接口
public interface Strategy {
double getPrice(double standardPrice);
}
然後是屬於策略1的客戶,原價,不打折。
public class Strategy1 implements Strategy {
@Override
public double getPrice(double standardPrice) {
System.out.println("原價");
return standardPrice;
}
}
策略二的客戶,打九折。
public class Strategy2 implements Strategy {
@Override
public double getPrice(double standardPrice) {
System.out.println("打九折");
return standardPrice * 0.9;
}
}
策略三的客戶,打八折。
public class Strategy3 implements Strategy {
@Override
public double getPrice(double standardPrice) {
System.out.println("八折");
return standardPrice * 0.8;
}
}
然後是一個上下文類,持有策略類實例。
public class Context {
private Strategy strategy;
public Context(Strategy strategy) {
this.strategy = strategy;
}
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void printPrice(double s){
System.out.println(strategy.getPrice(s));
}
}
最後是測試類。
public class Test {
public static void main(String[] args) {
Context context = new Context(new Strategy2());
context.printPrice(443);
}
}
最後的打印結果:
打九折
398.7