作者:京東工業 孫磊
一、概念
策略模式(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瀏覽量
68738
發布評論請先 登錄
相關推薦
關于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 枚舉與策略模式、函數式接口的結合:實現高內聚低耦合的設計
中,通常會使用枚舉來定義業務上的一組常量,那除了簡單地定義常量之外,我們如何利用枚舉來實現高內聚、低耦合的設計呢?下面介紹下枚舉和策略模式、函數式接口的組合應用。 二、枚舉+策略模式
評論