策略模式
策略模式
定义:策略模式是一种行为设计模式,在运行时改变对象的行为。
目的:定义一系列算法,把它们一个个封装起来,并且使它们可相互替换。
结构:
- 策略接口:声明了所有支持的所有算法的公共接口。
 - 具体策略:实现了策略接口中声明的算法
 - 上下文:使用某个具体策略实例时,通常上下文会提供一个接口供客户端调用,内部则根据设定的策略来执行相应的算法。
 
支付系统【场景再现】

硬编码完成不同的支付策略
public class Payment {
    public void processPayment(double amount, String paymentMethod) {
        if ("creditCard".equals(paymentMethod)) {
            System.out.println("Paying " + amount + " using credit card.");
        } else if ("alipay".equals(paymentMethod)) {
            System.out.println("Paying " + amount + " using Alipay.");
        } else if ("wechat".equals(paymentMethod)) {
            System.out.println("Paying " + amount + " using WeChat.");
        } else {
            throw new IllegalArgumentException("Unsupported payment method: " + paymentMethod);
        }
    }
}
 
测试类:
public class Client {
    public static void main(String[] args) {
        Payment payment = new Payment();
        payment.processPayment(100.0, "creditCard");
        payment.processPayment(200.0, "alipay");
        payment.processPayment(300.0, "wechat");
    }
}
 
使用策略模式,对比不同
- 定义一个支付策略接口
 - 实现具体的支付策略类
 - 创建一个上下文类来使用具体的支付策略
 
(1)支付策略接口
public interface PaymentStrategy {
    void pay(double amount);
}
 
(2)具体的支付策略类
- 信用卡支付策略
 
public class CreditCardPayment implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        System.out.println("Paying " + amount + " using credit card.");
    }
}
 
- 支付宝策略
 
public class AlipayPayment implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        System.out.println("Paying " + amount + " using Alipay.");
    }
}
 
- 微信支付策略
 
public class WeChatPayment implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        System.out.println("Paying " + amount + " using WeChat.");
    }
}
 
(3)上下文
public class PaymentContext {
    
    private PaymentStrategy paymentStrategy;
    // 构造器注入策略
    public PaymentContext(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }
    public void processPayment(double amount) {
        paymentStrategy.pay(amount);
    }
}
 
(4)客户端
public class Client {
    public static void main(String[] args) {
        // 创建不同的支付策略
        PaymentStrategy creditCardPayment = new CreditCardPayment();
        PaymentStrategy alipayPayment = new AlipayPayment();
        PaymentStrategy weChatPayment = new WeChatPayment();
        // 使用不同的支付策略
        PaymentContext context = new PaymentContext(creditCardPayment);
        context.processPayment(100.0);
        context = new PaymentContext(alipayPayment);
        context.processPayment(200.0);
        context = new PaymentContext(weChatPayment);
        context.processPayment(300.0);
    }
}
 
(5)小结
策略模式:
- 定义一个支付策略接口
PaymentStrategy - 实现三个具体的支付策略类
CreditCardPayment,AlipayPayment和WeChatPayment。 - 上下文类
PaymentContext,来使用具体的支付策略 - 客户端测试代码中动态选择不同的支付层策略
 









