您好!
欢迎来到京东云开发者社区
登录
首页
博文
课程
大赛
工具
用户中心
开源
首页
博文
课程
大赛
工具
开源
更多
用户中心
开发者社区
>
博文
>
设计模式-策略模式
分享
打开微信扫码分享
点击前往QQ分享
点击前往微博分享
点击复制链接
设计模式-策略模式
loveofyou
2025-01-07
IP归属:北京
9浏览
##### 一、概念 策略模式(Strategy Pattern)也称为(Policy Parttern)。 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变换,不会影响到使用算法的客户。策略模式属性行为模式。 策略模式结构图 ![image.png](https://s3.cn-north-1.jdcloud-oss.com/shendengbucket1/2024-03-31-22-01j89V31IfWuV9qoPs.png) ##### **二、实际应用** 业务场景:业务需要监听多种消息,将接收到的消息更新到同一个ES中,不同的消息类型使用不同的策略处理,补充不同的数据信息,更新到ES中,供商家搜索和统计使用。 代码实现结合spring框架、简单工厂和策略模式一起使用。 ```java public interface GatherExecuteService { /** * 处理消息体 * * @param gatherDataVo */ boolean execute(GatherDataVo gatherDataVo); } ``` 多个实现类 ```java // 价格策略实现 @Service public class PriceExecuteServiceImpl implements GatherExecuteService { @Override public boolean execute(GatherDataVo gatherDataVo) { .....具体实现代码省略 } } ``` ```java // 商品策略实现 @Service public class ProductExecuteServiceImpl implements GatherExecuteService { @Override public boolean execute(GatherDataVo gatherDataVo) { .....具体实现代码省略 } } ``` ```java // 库存策略实现 @Service public class StockExecuteServiceImpl implements GatherExecuteService { @Override public boolean execute(GatherDataVo gatherDataVo) { .....具体实现代码省略 } } ``` 使用枚举存储策略实现bean ```java @Getter @AllArgsConstructor public enum MessageTypeEnum { PRODUCT(0, "productExecuteServiceImpl", "商品基本信息消息"), PRICE(1, "priceExecuteServiceImpl", "价格消息"), STOCK(2, "stockExecuteServiceImpl", "库存消息") ; private int type; private String service; private String description; public static String getServiceName(int type) { MessageTypeEnum[] typeEnums = MessageTypeEnum.values(); for (MessageTypeEnum enumType : typeEnums) { if (enumType.getType() == type) { return enumType.getService(); } } return null; } } ``` 使用到不同策略的代码 ```java // 根据消息类型获取不同策略类,然后使用spring的ApplicationContext获取bean,达到执行不同策略的目的。 String serviceName = MessageTypeEnum.getServiceName(gatherDataVo.getMessageType()); if (StringUtils.isNotBlank(serviceName)) { GatherExecuteService gatherExecuteService = (GatherExecuteService) SpringContextUtil.getBean(serviceName, GatherExecuteService.class); } ``` 策略模式是一种比较简单的设计模式,工作中经常和其他设计模式一块使用。简单的应用记录分享一下。
上一篇:行稳、致远 | 技术驱动下的思考感悟
下一篇:【A/B实验常见问题】实验异常值应该如何处理?
loveofyou
文章数
3
阅读量
30
作者其他文章
01
Caffeine学习笔记
一、认识Caffeine1、Caffeine是什么?Caffeine是一个基于Java8开发的提供了近乎最佳命中率的高性能的缓存库, 也是SpringBoot内置的本地缓存实现。2、Caffeine提供了灵活的构造器去创建一个拥有下列特性的缓存:自动加载条目到缓存中,可选异步方式可以基于大小剔除可以设置过期时间,时间可以从上次访问或上次写入开始计算异步刷新keys自动包装在弱引用中values自动
01
设计模式-策略模式
一、概念策略模式(Strategy Pattern)也称为(Policy Parttern)。 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变换,不会影响到使用算法的客户。策略模式属性行为模式。策略模式结构图二、实际应用业务场景:业务需要监听多种消息,将接收到的消息更新到同一个ES中,不同的消息类型使用不同的策略处理,补充不同的数据信息,更新到ES中,供商家搜索和统计使用
01
EasyExcel碰到问题记录
1、富文本中文字设置不同颜色和字体不生效 String stringCellValue = cell.getStringCellValue(); if (StringUtils.isNotBlank(stringCellValue) && stringCellValue.contains(startIndex) && stringCel
loveofyou
文章数
3
阅读量
30
作者其他文章
01
Caffeine学习笔记
01
EasyExcel碰到问题记录
添加企业微信
获取1V1专业服务
扫码关注
京东云开发者公众号