使用注解+策略模式 来处理不同业务逻辑
以往,碰到不同的业务处理,会使用if-else,switch等逻辑判断。但是当种类多后,或者业务逻辑复杂等,会造成代码冗余等问题。
使用注解+策略模式 让代码变得更优雅吧
1、首先定义一个注解:
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface OrderStatusTag {
public String value() default "";
}
用于标识到底是哪个实现类去处理实际业务逻辑
2、定义一个接口,即搭一个处理业务的框架
public interface OrderHandleService {
void handleOrder(String orderStatus);
}
3、写多种具体的不同业务实现类(记得要标识我们的注解OrderStatusTag )
@OrderStatusTag("cancel")
@Service
public class CancelOrderHandleServiceImpl implements OrderHandleService {
@Override
public void handleOrder(String orderStatus) {
System.out.println("订单状态为:"+orderStatus);
System.out.println("进行退款操作。。。");
}
}
@OrderStatusTag("change")
@Service
public class ChangeNotifyOrderHandleServiceImpl implements OrderHandleService {
@Override
public void handleOrder(String orderStatus) {
System.out.println("订单状态为:"+orderStatus);
System.out.println("进行改签操作。。。");
}
}
@OrderStatusTag("nonSupport")
@Service
public class NonSupportOrderHandleServiceImpl implements OrderHandleService {
@Override
public void handleOrder(String orderStatus) {
System.out.println("订单状态为:"+orderStatus);
System.out.println("不支持订单");
}
}
4、定义一个上下文,即用于判断和选择一个合适的实现类(第3步里面的所有)
public interface ContextService {
OrderHandleService getOrderHandleService(String status);
}
5、实现上下文
@Service
public class ContextServiceImpl implements ContextService {
@Autowired
private List<OrderHandleService> handleServices;
@Autowired
private NonSupportOrderHandleServiceImpl nonSupportHandle;
@Override
public OrderHandleService getOrderHandleService(String status) {
if (StringUtils.isEmpty(status)) {
return nonSupportHandle;
}
OrderHandleService service = handleServices.stream().filter(f -> StringUtils.equals(status, f.getClass()
.getAnnotation(OrderStatusTag.class).value())).findFirst().orElse(nonSupportHandle);
return service;
}
}
6、入口测试类
@Service("local-regorder-mytest")
public class MytestImpl implements LocalDataService {
@Autowired
private ContextServiceImpl contextService;
@Override
public DataTemplate localData(String paramJson) {
OrderInfo order = new OrderInfo();
order.setName("用户姓名");
order.setOrderPrice("100");
order.setOrderStatus("cancel");
contextService.getOrderHandleService(order.getOrderStatus()).handleOrder(order.getOrderStatus());
return null;
}
}
效果:
参考:https://blog.csdn.net/u010739551/article/details/103685130