策略模式就是:把会变的行为抽出来,用接口定义,通过组合方式插入对象中,运行时可以随时替换。

策略模式适合用在行为(算法)需要灵活切换或复用的场景

接口

package org.example.payment;

public interface PaymentStrategy {
    void pay(int amount);
}

实现类

package org.example.payment;

public class AlipayStrategy implements PaymentStrategy{
    @Override
    public void pay(int amount) {
        System.out.println("使用支付宝支付" + amount + "元");
    }
}
package org.example.payment;

public class WeChatPayStrategy implements PaymentStrategy{
    @Override
    public void pay(int amount) {
        System.out.println("微信支付" + amount + "元");
    }
}
package org.example.payment;

public class CreditCardStrategy implements PaymentStrategy{
    @Override
    public void pay(int amount) {
        System.out.println("信用卡支付" + amount + "元");
    }
}

上下文

package org.example.payment;

public class PaymentContext {
    private PaymentStrategy paymentStrategy;

    public PaymentContext(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }

    // 切换策略
    public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }

    public void pay(int amount) {
        paymentStrategy.pay(amount);
    }
}

Main

package org.example.payment;

public class Main {
    public static void main(String[] args) {
        PaymentContext paymentContext = new PaymentContext(new AlipayStrategy());
        paymentContext.pay(10);

        paymentContext.setPaymentStrategy(new WeChatPayStrategy());
        paymentContext.pay(20);

        paymentContext.setPaymentStrategy(new CreditCardStrategy());
        paymentContext.pay(30);
    }
}