基于SpringBoot实现策略模式提供系统接口扩展能力


在Spring Boot应用中实现策略模式通常涉及以下几个步骤:

  1. 定义策略接口:

    • 定义一个接口,规定不同策略实现类需要实现的方法。这个接口将作为所有策略的共同基类。
    public interface PaymentStrategy {
        void pay(int amount);
    }
  2. 实现具体的策略类:

    • 实现上述接口的具体策略类。每个策略类代表一种支付方式。
    public class CreditCardPayment implements PaymentStrategy {
        @Override
        public void pay(int amount) {
            System.out.println("Paid " + amount + " using credit card.");
        }
    }
    
    public class PayPalPayment implements PaymentStrategy {
        @Override
        public void pay(int amount) {
            System.out.println("Paid " + amount + " using PayPal.");
        }
    }
    
    // 可以有其他的支付方式实现类
  3. 定义策略上下文:

    • 创建一个策略上下文,用于根据具体情况选择并调用不同的支付策略。
    public class PaymentContext {
        private PaymentStrategy paymentStrategy;
    
        public PaymentContext(PaymentStrategy paymentStrategy) {
            this.paymentStrategy = paymentStrategy;
        }
    
        public void executePayment(int amount) {
            paymentStrategy.pay(amount);
        }
    }
  4. 使用Spring Boot进行注入:

    • 在Spring Boot应用中,使用@Component注解将策略类注册为Spring Bean,以便进行依赖注入。
    import org.springframework.stereotype.Component;
    
    @Component
    public class CreditCardPayment implements PaymentStrategy {
        @Override
        public void pay(int amount) {
            System.out.println("Paid " + amount + " using credit card.");
        }
    }
    
    @Component
    public class PayPalPayment implements PaymentStrategy {
        @Override
        public void pay(int amount) {
            System.out.println("Paid " + amount + " using PayPal.");
        }
    }
  5. 在服务中使用策略模式:

    • 在需要支付的服务中,注入策略上下文,并调用相应的支付方法。
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    @Service
    public class PaymentService {
        private final PaymentContext paymentContext;
    
        @Autowired
        public PaymentService(PaymentContext paymentContext) {
            this.paymentContext = paymentContext;
        }
    
        public void processPayment(int amount, String paymentMethod) {
            switch (paymentMethod) {
                case "creditCard":
                    paymentContext.executePayment(amount, "creditCard");
                    break;
                case "payPal":
                    paymentContext.executePayment(amount, "payPal");
                    break;
                // 可以添加其他支付方式的处理逻辑
                default:
                    throw new IllegalArgumentException("Invalid payment method: " + paymentMethod);
            }
        }
    }

这样,你就可以通过调用processPayment方法并传入相应的支付方式,实现对应策略的执行。Spring Boot会自动根据@Component注解进行依赖注入,将具体的支付策略类注入到PaymentContext中。

请注意,这只是一个简单的示例。在实际应用中,可能需要更复杂的逻辑来选择合适的支付策略。


原文链接:codingdict.net