springboot设计模式-策略模式

2 篇文章 0 订阅
1 篇文章 0 订阅

在Spring Boot中,实现策略模式的最佳写法是使用Spring框架的依赖注入(DI)功能,以及使用@Bean注解将所有实现接口的类注册为Spring bean。

以下是实现策略模式的最佳写法的步骤:

  1. 创建一个接口,定义策略模式的方法:
public interface PaymentStrategy {
    void pay(double amount);
}
  1. 创建多个实现接口的类,实现策略模式的方法,并使用@Component注解将它们注册为Spring Bean:
@Component
public class CreditCardPaymentStrategy implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        System.out.println("Paying " + amount + " using credit card");
    }
}

@Component
public class PaypalPaymentStrategy implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        System.out.println("Paying " + amount + " using PayPal");
    }
}

@Component
public class CashPaymentStrategy implements PaymentStrategy {
    @Override
    public void pay(double amount) {
        System.out.println("Paying " + amount + " in cash");
    }
}
  1. 创建一个策略工厂类,使用@Autowired注解将所有实现策略模式的类注入到工厂中:
@Component
public class PaymentStrategyFactory {
    private final Map<String, PaymentStrategy> paymentStrategies;

    @Autowired
    public PaymentStrategyFactory(List<PaymentStrategy> paymentStrategies) {
        this.paymentStrategies = paymentStrategies.stream()
                .collect(Collectors.toMap(PaymentStrategy::getClassSimpleName, Function.identity()));
    }

    public PaymentStrategy getPaymentStrategy(String paymentMethod) {
        return paymentStrategies.get(paymentMethod);
    }
}

在上述代码中,我们注入了所有实现PaymentStrategy接口的Spring Bean,并将它们存储在一个Map中。getPaymentStrategy方法接受一个字符串参数paymentMethod,表示要使用的支付方法,并返回相应的PaymentStrategy实现类。

  1. 创建一个服务类,在服务类中注入策略工厂类,并根据需求选择相应的策略:
@Service
public class PaymentService {
    private final PaymentStrategyFactory paymentStrategyFactory;

    @Autowired
    public PaymentService(PaymentStrategyFactory paymentStrategyFactory) {
        this.paymentStrategyFactory = paymentStrategyFactory;
    }

    public void processPayment(String paymentMethod, double amount) {
        PaymentStrategy paymentStrategy = paymentStrategyFactory.getPaymentStrategy(paymentMethod);
        paymentStrategy.pay(amount);
    }
}

在上述代码中,我们注入了PaymentStrategyFactory,并在processPayment方法中使用它来获取相应的PaymentStrategy实现类。

  1. 在应用中调用服务类的方法:
@SpringBootApplication
public class StrategyPatternDemoApplication implements CommandLineRunner {

    @Autowired
    private PaymentService paymentService;

    public static void main(String[] args) {
        SpringApplication.run(StrategyPatternDemoApplication.class, args);
    }

    @Override
    public void run(String... args) throws Exception {
        double amount = 100.00;
        String paymentMethod = "CreditCardPaymentStrategy";
        paymentService.processPayment(paymentMethod, amount);
    }
}

在上述代码中,我们创建了一个Spring Boot应用,并在其中注入了PaymentService。然后在run方法中,我们调用了processPayment方法来执行具体的支付策略。

公众号: 代码极客(已接入chagpt3.5)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值