策略模式之简单形式

我们在工作中会遇到由于业务类型太多,通过在代码中使用if/else或者swich的方式,区分不同类型,处理不同的业务逻辑,代码中充斥这大量的判断,导致可阅读性很差,而且新增一个业务类型,又要追加一次判断,一堆判断逻辑、业务逻辑,进一步使代码变得更加臃肿,不利于后续的代码维护,今天给大家介绍几种策略模式如何写。

业务模式:我们就用互联网中常见的WMS仓库系统举例,WMS系统重要就是库存管理,库存数据来源入库又分为很多中,例如:上架入库、备货上架入库、备货下架入库、报损上架入库、报损下架入库以及移库等类型,每一种对库存的操作都需要根据类型进行分别处理,他们有相同的地方,也有不同的地方,相同之处是都是都库存那几张表尽心操作,加减库存数量以及操作记录,往细看,他们有不同之处,不同的地方是他们对库存的总库存、可用库存、锁定库存等字段等操作又不同。

1、一般的策略模式写法:

接口 StockHandle

public interface StockHandle {
    void operatorStock(WmsOperateStockParam stockParam);
    default void cancelStock(WmsOperateStockParam stockParam){}
}

实现类就是各个入库类型,我们只写一种类型数据最源头的入库上架

public class WmsInboundStockHandle implements StockHandle {
    @Resource
    private WmsStockOperateService wmsStockOperateService;

    @Override
    public void operatorStock(WmsOperateStockParam stockParam) {
        wmsStockOperateService.operateInboundStock(stockParam);
    }
}

上下文Context类

public class Context {

    StockHandle handle;
    
    public void operateStock(){
        handle.operateStock();
    }

    public void setStrategy(StockHandle handle) {
        this.handle = handle;
    }
}

调用的时候

public class Client {

    public static void main(String[] args) throws Exception {
        Context context = new Context();
        context.setStrategy(new WmsInboundStockHandle());
        context.operateStock();
    }
}

总结:这样简单的策略模式有几个问题

1、当我给其他服务只提供一个入口,例如上面的定义一个stockMain方法,所有类型的操作库存都调用这一个方法,我们只能该方法中增加判断

2、如果给其他服务提供不同的几个入库(提供入库数小于实现类数)时,每个入口又需要写重复的代码

解决方法:

1、针对第一个问题,我们可以增加一个工厂类以及通过在实现类注册成bean以后将该bean保存在工厂类的map中,每次根据入库类型通过工厂类获取对应的实例。

2、针对第二个问题,我们可以通过注解的方式,在bean实例化完成后将其保存到map中,我们通过注解的方式替换上下文类Context类,不管存在多少个入口,调用方只需要按照普通bean调用流程即可

预言:

下一篇文章来介绍如何通过注解的方式实现上述的业务

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值