目录
一、策略模式
策略模式是一种设计模式,它允许程序在运行中动态的选择不同的行为方式进行动态执行。策略模式的核心思想是将行为封装在一个个独立的类中,这些类实现了相同的接口或抽象类,客户端可以通过接口来调用不同的实现,而不知道具体的实现细节。下面来看一个具体的案例。
现在的移动支付非常的便捷,而且有很多支付方式,假如让你负责支付路由的设计该如何设计,如何实现支付渠道的选择的呢?
比如用户支付时可以选择支付宝、微信、银行卡,那系统底层是如何进行操作的,后期如果在加入新的支付方式,该如何进行扩展呢?
当然如果你使用 if else 肯定是能实现的,但这种代码可读性差、可维护性差,而且不利于扩展,使用策略模式就能优雅的解决这些问题。
二、Spring Plugin
Spring Plugin 是 Spring 框架的一个扩展,用于实现插件化开发。它提供了插件注册、加载、卸载等功能。Spring Plugin 提供了一种简单而有效的方式来实现插件化开发,使得应用程序能够更加灵活和易于维护。
下面通过 Spring Plugin 来实现上面提到的支付路由的策略模式。
2.1 Spring Plugin 实现策略模式开发
引入依赖
<dependency>
<groupId>org.springframework.plugin</groupId>
<artifactId>spring-plugin-core</artifactId>
<version>指定版本</version>
</dependency>
定义支付方式接口
public interface PaymentStrategy extends Plugin<String> {
/**
* 支付路由选择
*
* @param paymentReq 待处理的订单信息, 入参中携带支付标识
* @return
*/
PayResult pay(PaymentReq paymentReq);
}
具体的支付实现
// 支付宝支付实现
@Service
public class AliPayService implements PaymentStrategy {
@Override
public PayResult pay(PaymentReq paymentReq) {
// 模拟支付宝支付流程
return new PayResult();
}
@Override
public boolean supports(String payment) {
// 支付方式是否为支付宝,这里简化一些,正常情况下需要使用枚举
return "alipay".equals(payment);
}
}
// 微信支付实现
@Service
public class WechatPayService implements PaymentStrategy {
@Override
public PayResult pay(PaymentReq paymentReq) {
// 模拟微信支付流程
return new PayResult();
}
@Override
public boolean supports(String payment) {
// 支付方式是否为微信,这里简化一些,正常情况下需要使用枚举
return "wechatpay".equals(payment);
}
}
假如后期要加入银联支付方式,