设计模式-行为型-策略模式

76 阅读1分钟

简介

策略模式是行为型模式的一种,当一个类在运行过程中其状态会改变,此时就适合策略模式。通常策略模式是跟工厂模式一起使用,工厂模式用于创建策略。接下来以一个商场的打折案例来示例:

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
    }
}