简介
策略模式是行为型模式的一种,当一个类在运行过程中其状态会改变,此时就适合策略模式。通常策略模式是跟工厂模式一起使用,工厂模式用于创建策略。接下来以一个商场的打折案例来示例:
Demo示例
假设一个商场执行打折活动,当50<=price<=100时优惠20元,当price>=100时,直接打5折。 1.首先定义策略的接口,然后策略1和策略2实现该接口。
public interface Strategy {
int discount();
}
public class DiscountStrategy1 implements Strategy {
private int price;
public DiscountStrategy1(int price) {
this.price = price;
}
@Override
public int discount() {
return this.price - 20;
}
}
public class DiscountStrategy2 implements Strategy{
private int price;
public DiscountStrategy2(int price) {
this.price = price;
}
@Override
public int discount() {
return this.price / 2;
}
}
2.定义策略工厂类,用于生产策略。
public class StrategyFactory {
public static Strategy createStrategy(int price) {
if (price >= 50 && price <= 100) {
return new DiscountStrategy1(price);
} else if (price > 100) {
return new DiscountStrategy2(price);
}
return null;
}
}
3.定义策略上下文context
public class DiscountContext {
private Strategy strategy;
public DiscountContext(Strategy strategy) {
this.strategy = strategy;
}
public int execDiscount() {
return this.strategy.discount();
}
}
4.客户端调用
public class Test {
public static void main(String[] args) {
int price1 = 58;
Strategy strategy1 = StrategyFactory.createStrategy(price1);
int pay1 = new DiscountContext(strategy1).execDiscount();
System.out.println(pay1); //38
int price2 = 200;
Strategy strategy2 = StrategyFactory.createStrategy(price2);
int pay2 = new DiscountContext(strategy2).execDiscount();
System.out.println(pay2);//100
}
}