策略模式与责任链在项目中的应用

在我写的一个工单项目中 由于工单分为了比如 补货工单 运营工单 投放工单 等不同的工单类型 为了解决在代码中使用if else 语句 减少代码的耦合性 所以 使用了策略模式加工厂模式  代码如下

  首先定义了一个策略的接口

自定义了一个注解 当消息中间件消费消息时通过此注解的值 对消息进行分别处理

分别实现策略接口 编写自己的处理逻辑 并将此类创建bean

自定义了一个工厂类 通过hashMap  对我们写的不同的策略进行注入 通过spring 中的扩展点 在bean  初始化前对在spring 容器中的bean 对象进行判断 如果该类上面有我们自定义的注解即可拿出来并注入到 hashMap    spring 还有很多扩展点 这里只是其中一个 

 也可也这样写

因为我写了2种不同的扩展点写法 所以在这里进行注入的时候 写了 name=""    最终我们可以通过key 实现对应的策略

 最终成功实现

 通常也可以跟模板模式一起写 模板模式将一些公共的抽取出来 模板主要是 可以按照代码的逻辑顺序 先干什么 后干什么进行编排 。好了下面介绍一下责任链模式 

      责任链模式主要是控制流程 比如审批流 a先审批 然后b再审批 下面写一个请假的流程的审批 主要涉及到的类 有 组长   经理 总经理

首先定义了一个抽象类  主要是通过next 成员属性把这一条链路进行组装起来

组长类 只能审批小于3天内的请假

 经理类 只能审批小于5天的

 总经理 只能审批小于10天的

 那么如何把这些组装起来呢 我们可以采用硬编码 在需要审批流的时候自己编排顺序 但是如果需要在很多个地方都需要用到 那么在我们的代码里面会到处都有冗余  也不方便进行管理 所以我采取把这些 注册到spring容器里面 进行统一的管理 那怎么对其审批的顺序进行控制 我觉得可以采用自定义注解 在spring加载时获取到所有的审批类 然后通过反射获得该注解的值 来以次进行顺序的编排 当然这个注解可以有多个值 可以有审核类型 次序 我这里只有审核的次序。 下面如何从spring容器中拿到并进行次序的编排

 

 这样就可以实现自动的编排 需要的时候只需 自己注入根节点即可使用

 完成我想要的功能。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值