作者:京东工业 孙磊
一、概念
策略模式(Strategy Pattern)也称为(Policy Parttern)。 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变换,不会影响到使用算法的客户。策略模式属性行为模式。
二、实际应用
业务场景:业务需要监听多种消息,将接收到的消息更新到同一个ES中,不同的消息类型使用不同的策略处理,补充不同的数据信息,更新到ES中,供商家搜索和统计使用。
代码实现结合spring框架、简单工厂和策略模式一起使用。
public interface GatherExecuteService { /** * 处理消息体 * * @param gatherDataVo */ boolean execute(GatherDataVo gatherDataVo); }
多个实现类
// 价格策略实现 @Service public class PriceExecuteServiceImpl implements GatherExecuteService { @Override public boolean execute(GatherDataVo gatherDataVo) { .....具体实现代码省略 } }
// 商品策略实现 @Service public class ProductExecuteServiceImpl implements GatherExecuteService { @Override public boolean execute(GatherDataVo gatherDataVo) { .....具体实现代码省略 } }
// 库存策略实现 @Service public class StockExecuteServiceImpl implements GatherExecuteService { @Override public boolean execute(GatherDataVo gatherDataVo) { .....具体实现代码省略 } }
使用枚举存储策略实现bean
@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; } }
使用到不同策略的代码
// 根据消息类型获取不同策略类,然后使用spring的ApplicationContext获取bean,达到执行不同策略的目的。 String serviceName = MessageTypeEnum.getServiceName(gatherDataVo.getMessageType()); if (StringUtils.isNotBlank(serviceName)) { GatherExecuteService gatherExecuteService = (GatherExecuteService) SpringContextUtil.getBean(serviceName, GatherExecuteService.class); }
策略模式是一种比较简单的设计模式,工作中经常和其他设计模式一块使用。简单的应用记录分享一下。
审核编辑 黄宇
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
代码
+关注
关注
30文章
4802浏览量
68741
发布评论请先 登录
相关推荐
关于LVOOP设计模式的框架问题?
1. 请问目前的很多设计模式,比如简单工厂模式,策略模式之类的,labview是不是没有框架,需要自己手工去实现?2. labview的actor framework是不是目前labv
发表于 08-07 23:14
封装变化与面向接口编程
在使用Java的集合框架中,经常需要通过构造方法传入一个比较器Comparator或者创建比较器传入Collections的静态方法中作为方法参数,进行比较排序等,这其实就是策略模式的应用。策略
发表于 11-28 15:04
•7364次阅读
为什么我不再推荐枚举策略模式?
我们可以看到经典方法,创建了一个接口、三个策略类,还是比较啰嗦的。调用类的实现也待商榷,新增一个策略类还要修改榜单实例(可以用抽象工厂解决,但是复杂度又上升了)。加之我们有更好的选择,所以此处不再推荐经典策略
基于输入阻抗控制的多模式混合PFC的控制策略
简单地说,混合PFC的控制策略就是操纵开关频率在正弦电压内进行变化来进行跨越多个区域,难点是多模式区域的增益不会统一,实现多模式优秀的电流控制效果就是难题
如何通过策略模式简化if-else
相信大家日常开发中会经常写各种分支判断语句,比如 if-else ,当分支较多时,代码看着会比较臃肿,那么如何优化呢? 1、什么是策略模式? Define a family
Java 枚举与策略模式、函数式接口的结合:实现高内聚低耦合的设计
中,通常会使用枚举来定义业务上的一组常量,那除了简单地定义常量之外,我们如何利用枚举来实现高内聚、低耦合的设计呢?下面介绍下枚举和策略模式、函数式接口的组合应用。 二、枚举+策略模式
评论