注解实现策略模式干掉if-else(下)

这篇博客探讨了在注解实现策略模式时遇到的代码重复问题。文章提出,当不同订单来源和支付方式的组合对应相同处理逻辑时,可以通过复用代码并更新注解设计来维护映射关系。文章详细解释了如何使用@OrderHandlerTypes注解来处理多个订单来源和支付方式的组合,同时保持它们的关联关系,以避免if-else和类膨胀。最后,作者强调了注解在简化代码和增强可维护性方面的关键作用。
摘要由CSDN通过智能技术生成

上篇回顾

上一篇(注解实现策略模式干掉if-else(上))中我们介绍了如何通过注解实现策略模式,定义@OrderHandlerType注解和对应的注解实现类OrderHandlerTypeImpl,并维护了类型为Map<OrderHandlerType, OrderHandler>的orderHandleMap,完成了订单来源与支付方式到订单处理器Handler的映射关系,使得我们在选择订单处理器Handler时更加灵活,更易扩展。

但是在上篇中遗留了一个问题,那就是如果PC端支付宝支付和微信支付是同一种处理逻辑,而移动端支付宝支付和微信支付是不同的处理逻辑,那情况就变成了PCAliPayOrderHandler和PCWeChatOrderHandler这两个类是同一套代码逻辑,本篇讲的就是如何应对这种具有相同处理逻辑的情况。

代码重复的情况

现在我们有以下四个OrderHandler的实现类,分别处理PC端支付宝支付的订单、PC端微信支付的订单、移动端支付宝支付的订单和移动端微信支付的订单:

@OrderHandlerType(source = "pc", payMethod = "alipay")
public class PCAliPayOrderHandler implements OrderHandler {
   
    @Override
    public void handle(Order order) {
   
        System.out.println("处理PC端通过支付宝支付的订单");
    }
}
==========分隔线==========
@OrderHandlerType(source = "pc",payMethod = "weChat")
public class PCWeChatOrderHandler implements OrderHandler {
   
    @Override
    public void handle(Order order) {
   
        System.out.println("处理PC端通过微信支付的订单");
    }
}
==========分隔线==========
@OrderHandlerType(source = "mobile",payMethod = "alipay")
public class MobileAliPayOrderHandler implements OrderHandler {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值