大数跨境
0
0

设计模式-策略模式

设计模式-策略模式 京东云开发者
2025-09-18
1
导读:一、概念策略模式(Strategy Pattern)也称为(Policy Parttern)。
一、概念

策略模式(Strategy Pattern)也称为(Policy Parttern)。 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变换,不会影响到使用算法的客户。策略模式属性行为模式。

策略模式结构图
image.png

二、实际应用

业务场景:业务需要监听多种消息,将接收到的消息更新到同一个ES中,不同的消息类型使用不同的策略处理,补充不同的数据信息,更新到ES中,供商家搜索和统计使用。

代码实现结合spring框架、简单工厂和策略模式一起使用。

public interface GatherExecuteService {        /**         * 处理消息体         *         * @param gatherDataVo         */        boolean execute(GatherDataVo gatherDataVo);}

多个实现类

// 价格策略实现@Servicepublic class PriceExecuteServiceImpl implements GatherExecuteService {        @Override        public boolean execute(GatherDataVo gatherDataVo) {         .....具体实现代码省略       }}
// 商品策略实现@Servicepublic class ProductExecuteServiceImpl implements GatherExecuteService {      @Override        public boolean execute(GatherDataVo gatherDataVo) {          .....具体实现代码省略      }}
// 库存策略实现@Servicepublic class StockExecuteServiceImpl implements GatherExecuteService {        @Override        public boolean execute(GatherDataVo gatherDataVo) {        .....具体实现代码省略       }}

使用枚举存储策略实现bean

@Getter@AllArgsConstructorpublic 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);  }

策略模式是一种比较简单的设计模式,工作中经常和其他设计模式一块使用。简单的应用记录分享一下。

【声明】内容源于网络
0
0
京东云开发者
京东云开发者(Developer of JD Technology)是京东科技集团旗下为AI、云计算、IoT等相关领域开发者提供技术分享交流的平台。平台将发布京东产品技术信息、行业技术内容、技术活动等资讯。拥抱技术,与开发者携手预见未来!
内容 1310
粉丝 0
京东云开发者 京东云开发者(Developer of JD Technology)是京东科技集团旗下为AI、云计算、IoT等相关领域开发者提供技术分享交流的平台。平台将发布京东产品技术信息、行业技术内容、技术活动等资讯。拥抱技术,与开发者携手预见未来!
总阅读43
粉丝0
内容1.3k