【一起学设计模式】策略模式实战一:基于消息发送的策略模式实战

本文介绍了在实际工作中如何应用策略模式来处理消息发送的业务需求。通过枚举类定义不同消息类型如短信、push、微信和私信,然后展示策略分发和具体策略实现的代码,探讨了策略模式的优缺点。文章适合想学习和理解策略模式的读者,以实例加深对设计模式的认识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近准备学习下之前项目中用到的设计模式,这里代码都只展示核心业务代码,省略去大多不重要的代码。

代码大多是之前一起工作的小伙伴coding出来的,我这里做一个学习和总结,我相信技术能力的提高都是先从模仿开始的,学习别人的代码及设计思想也是一种提升的方式。

 

后续还会有观察者模式、责任链模式的博客产出,都是工作中正式运用到的场景输出,希望对看文章的你也有启发和帮助。

一、业务需求

 
我之前做过在线问诊的需求,业务复杂,很多节点需要出发消息推送,比如用户下单 需要给医生推送短信和push、医生接诊 需要给用户发送短信、push、微信等。产品说后期会有很多不同的节点触发消息发送。
 
这里就开始抽象需求,首先是发送消息,很多消息是同样的策略,只是组装的数据是动态拼接的,所以抽象出:buildSms()、buildPush()、buildWechat() 等构造消息体的方法,对于拼接字段相同的都采用同一策略,列入消息A、B需要通过医生id拼接消息,消息C、D需要通过用户id拼接消息,那么A、B就采用同一策略,C、D采用另一策略。
 
流程图大致如下:
 
各个业务系统 根据策略构造自己的消息体,然后通过kafka发送个底层服务,进行消息统一推送。
 
 

二、策略模式

 
策略模式(Strategy Pattern)指的是对象具备某个行为,但是在不同的场景中,该行为有不同的实现算法。比如一个人的交税比率与他的工资有关,不同的工资水平对应不同的税率。
策略模式 使用的就是面向对象的继承和多态机制,从而实现同一行为在不同场景下具备不同实现。
策略模式本质:分离算法,选择实现
 
主要解决在有多重算法相似的情况下,使用if...else 或者switch...case所带来的的复杂性和臃肿性。
 
 
代码示例:
 1 class Client {
 2     public static void main(String[] args) {
 3         ICalculator calculator = new Add();
 4         Context context = new Context(calculator);
 5         int result = context.calc(1,2);
 6         System.out.println(result);
 7     }
 8  
 9  
10     interface ICalculator {
11         int calc(int a, int b);
12     }
13  
14  
15     static class Add implements ICalculator {
16         @Override
17         public int calc(int a, int b) {
18             return a + b;
19         }
20     }
21  
22  
23     static class Sub implements ICalculator {
24 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值