行为型模式 - 策略模式 (Strategy Pattern)

行为型模式 - 策略模式 (Strategy Pattern)

策略模式定义了一系列的算法,并将每个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户端。以下是几个策略模式的经典案例。


// 一个经典的例子,支付方式、微信、支付宝、银联

// 1. 策略接口
public interface PaymentStrategy {
    void pay(double amount);
}

// 2.具体策略实现
// 微信
public class WeChatPayment implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        System.out.println("使用微信支付:¥" + amount);
        // 这里可以调用微信支付的 API
    }
}
// 支付宝
public class AliPayment implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        System.out.println("使用支付宝支付:¥" + amount);
        // 这里可以调用支付宝的 API
    }
}
// 银联
public class UnionPayment implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        System.out.println("使用银联支付:¥" + amount);
        // 这里可以调用银联支付的 API
    }
}

// 这么做的好处就是,假设以后多来一种支付方式,如PayPal啊,抖音支付啊,京东支付,随便你怎么加只需要创建一个对应的实现即可,对拓展非常友好

// 3. 然后是一个上下文 Context
public class PaymentContext {
    private PaymentStrategy paymentStrategy;

    // 设置支付策略
    public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }

    // 执行支付
    public void executePayment(double amount) {
        if (paymentStrategy == null) {
            throw new IllegalStateException("支付策略未设置");
        }
        paymentStrategy.pay(amount);
    }
}

//4. 客户端这么使用

//创建上下文,使用哪种方式,由使用者自主选择,非常灵活
public class PaymentDemo {
    public static void main(String[] args) {
        // 创建支付上下文
        PaymentContext context = new PaymentContext();

        // 使用微信支付
        context.setPaymentStrategy(new WeChatPayment());
        context.executePayment(100.0);

        // 使用支付宝支付
        context.setPaymentStrategy(new AliPayment());
        context.executePayment(200.0);

        // 使用银联支付
        context.setPaymentStrategy(new UnionPayment());
        context.executePayment(300.0);
    }
}


你可能感兴趣的:(Java设计模式,策略模式,设计模式)