前言
一直负责部门的订单模块,从php转到Java也是如此,换了一种语言来实现订单相关功能。那么Spring里有很多已经搭建好基础模块的设计模式来帮助我们解耦实际业务中的逻辑,用起来非常的方便!就比如我们的订单操作模块。生成订单后,有很多操作。比如:取消、支付、关闭…等等。那么用设计模式的思想去处理这些不同的操作,最好用的就是策略模式来解决它们!把不同的操作分配到不同的实现类里去。这不,我发现了一个不错的东西Spring plugin
!
Spring Plugin
Spring plugin
这个小东西我也是在看一些开源项目才看到的,感觉还不错。就立马拿来用了下,把它带到我们业务场景里去。这不,带大家体验下。
下面用Spring plugin
来重构下订单的相关操作实现。这里我们只模拟,支付和关闭的操作。最后再来简单分析下Spring plugin
的原理
实战
首先呢、定义一个操作类型的枚举类,来边界下当前我们系统支持的操作类型!
public enum OrderOperatorType {
/**
* 关闭
*/
CLOSED,
/**
* 支付
*/
PAY
;
}
第二步、定义操作接口,实现Spring plugin
的Plugin<S>
接口,和配置插件
public interface OrderOperatorPlugin extends Plugin<OrderOperatorDTO> {
/**
* 定义操作动作
* @param operator
* @return
*/
public Optional<?> apply(OrderOperatorDTO operator);
}
//配置插件,插件写好了,我们要让插件生效!
@Configuration
@EnablePluginRegistries({
OrderOperatorPlugin.class})
public class OrderPluginConfig {
}
第三步 、定义具体的实现类(支付操作、关闭操作)
@Component
public class PayOperator implements OrderOperatorPlugin {
@Override
public Optional<?> apply(OrderOperatorDTO operator) {
//支付操作
//doPay()
return Optional.of("支付成功");
}
@Override
public boolean supports(OrderOperatorDTO operatorDTO) {
return operatorDTO.getOperatorType() == OrderOperatorType.PAY;
}
}
@Component
public class ClosedOperator implements OrderOperatorPlugin {
@Override
public Optional<?> apply(OrderOperatorDTO operator) {
//关闭操作
//doClosed()
return Optional.of(