上篇回顾
上一篇(注解实现策略模式干掉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 {