策略模式的应用

本文介绍了如何运用策略模式设计一个消息推送服务,包括定义公共接口MsgService和MsgVO类,根据不同消息服务创建接口实现类,利用配置类MsgContext存储服务映射,通过MsgVO的type动态选择服务进行推送。这种方式实现了服务的可扩展性和解耦,允许前端配置自由切换消息服务。
摘要由CSDN通过智能技术生成

最近需要写一个消息推送的服务,根据前端用户的配置支持不同的消息服务,应用到了策略模式

总结:

  • 首先准备一个公用的接口服务类MsgService,定义一个send方法,参数为封装的MsgVO类(MsgVO类中定义一个type,然后引入不同的消息服务的VO类作为主VO类的参数)
  • 不同的消息服务定义各自的接口和接口实现类,接口实现类可以实现多个接口,分别实现自己的接口和公用接口MsgService,重写send方法(由于不同的消息服务需要的参数不同,这里可以在自己的接口实现类中写一个方法,然后在send方法中调用这个方法,传参为MsgVO类中自己的VO类属性,从而实现可拓展和解耦)
  • 写一个配置类MsgContext(用@configuration注解),写一个静态方法,参数为不同的消息服务接口实现类,返回一个Map<String,MsgService>,将这个map作为静态属性,静态方法中设置map的key为服务type,value为参数中的消息服务接口实现类
  • 在controller中接收一个MsgVO类,调用MsgContext的静态属性,返回一个map,根据MsgVO中获取的type在map中得到目标服务,调用公共send方法,从而实现推送功能
  • 在远程服务中传参时,可以先查询数据库消息服务是否开启,拿到服务开启的key,此时不需要判断该key为哪个服务的key,直接将MsgVO类不同的消息服务的VO类设置好参数,将查询到的key设置到MsgVO类的type,调用远程feign的send方法即可
  • 程序可根据前端的启用配置自由切换服务

反思:刚开始的时候对程序不太理解,认为由于传入的参数不同,必须在业务服务中确定是哪个消息服务,或者考虑远程获取到配置类的map从而获取到特定的消息服务,才能进行传参,考虑后理解可以将不同的参数封装成一个公共的VO类,服务正常在消息服务中心进行调用,其他微服务只需要提供必须的参数以供判断

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值