在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

設計模式-策略模式

京東云 ? 來源:京東工業 孫磊 ? 作者:京東工業 孫磊 ? 2025-01-08 13:47 ? 次閱讀

作者:京東工業 孫磊

一、概念

策略模式(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
收藏 人收藏

    評論

    相關推薦

    一文詳解前端常用設計模式

    設計模式一直是程序員談論的“高端”話題之一,總有一種敬而遠之的心態。在了解后才知道在將函數作為一等對象的語言中,有許多需要利用對象多態性的設計模式,比如單例模式策略
    的頭像 發表于 11-30 10:19 ?1628次閱讀
    一文詳解前端常用設計<b class='flag-5'>模式</b>

    關于LVOOP設計模式的框架問題?

    1. 請問目前的很多設計模式,比如簡單工廠模式策略模式之類的,labview是不是沒有框架,需要自己手工去實現?2. labview的actor framework是不是目前labv
    發表于 08-07 23:14

    基于交錯反激的微型逆變器不同工作模式控制策略的仿真研究

    基于交錯反激的微型逆變器不同工作模式控制策略的仿真研究_胡林靜
    發表于 12-15 18:02 ?4次下載

    混合導通模式BoostPFC的控制策略研究

    混合導通模式BoostPFC的控制策略研究_王武
    發表于 01-04 16:32 ?8次下載

    封裝變化與面向接口編程

    在使用Java的集合框架中,經常需要通過構造方法傳入一個比較器Comparator或者創建比較器傳入Collections的靜態方法中作為方法參數,進行比較排序等,這其實就是策略模式的應用。策略
    發表于 11-28 15:04 ?7364次閱讀
    封裝變化與面向接口編程

    不會有人不知道怎么優雅的替換if-else語句吧

    三板斧手段: 優先判斷條件,條件不滿足的,邏輯及時中斷返回; 融入策略模式策略模式+工廠+單例模式,錦上添花; 接
    的頭像 發表于 07-28 15:46 ?1445次閱讀
    不會有人不知道怎么優雅的替換if-else語句吧

    設計模式最佳實踐探索—策略模式

    根據不同的應用場景與意圖,設計模式主要分為創建型模式、結構型模式和行為型模式三類。本文主要探索行為型模式中的
    的頭像 發表于 10-31 14:24 ?960次閱讀

    為什么我不再推薦枚舉策略模式

    我們可以看到經典方法,創建了一個接口、三個策略類,還是比較啰嗦的。調用類的實現也待商榷,新增一個策略類還要修改榜單實例(可以用抽象工廠解決,但是復雜度又上升了)。加之我們有更好的選擇,所以此處不再推薦經典策略
    的頭像 發表于 04-14 10:52 ?2060次閱讀

    基于輸入阻抗控制的多模式混合PFC的控制策略

    簡單地說,混合PFC的控制策略就是操縱開關頻率在正弦電壓內進行變化來進行跨越多個區域,難點是多模式區域的增益不會統一,實現多模式優秀的電流控制效果就是難題
    的頭像 發表于 04-25 14:20 ?1370次閱讀
    基于輸入阻抗控制的多<b class='flag-5'>模式</b>混合PFC的控制<b class='flag-5'>策略</b>

    高頻使用的幾種設計模式

    策略模式定義了算法族,分別封裝起來,讓它們之間可以相互替換,此模式讓算法的變化獨立于使用算法的的客戶。這個策略模式的定義是不是有點抽象呢?那
    的頭像 發表于 05-08 09:57 ?1042次閱讀
    高頻使用的幾種設計<b class='flag-5'>模式</b>

    設計模式行為型:策略模式

    策略模式(Strategy Pattern)中,一個類的行為或其算法可以在運行時更改。這種類型的設計模式屬于行為型模式
    的頭像 發表于 06-07 11:18 ?674次閱讀
    設計<b class='flag-5'>模式</b>行為型:<b class='flag-5'>策略</b><b class='flag-5'>模式</b>

    迭代模式在UVM中的應用有哪些

    行為型設計模式數量較多,上一篇介紹了模板模式策略模式,下面對迭代模式進行介紹,挖掘其在UVM中的應用。
    的頭像 發表于 08-14 17:15 ?628次閱讀
    迭代<b class='flag-5'>模式</b>在UVM中的應用有哪些

    什么是策略模式

    什么是策略模式 官話: 策略模式(Strategy Pattern): 定義一系列算法類,將每一個算法封裝起來,并讓它們可以相互替換,策略
    的頭像 發表于 10-08 14:15 ?2744次閱讀
    什么是<b class='flag-5'>策略</b><b class='flag-5'>模式</b>

    如何通過策略模式簡化if-else

    相信大家日常開發中會經常寫各種分支判斷語句,比如 if-else ,當分支較多時,代碼看著會比較臃腫,那么如何優化呢? 1、什么是策略模式? Define a family
    的頭像 發表于 10-08 16:08 ?784次閱讀
    如何通過<b class='flag-5'>策略</b><b class='flag-5'>模式</b>簡化if-else

    Java 枚舉與策略模式、函數式接口的結合:實現高內聚低耦合的設計

    中,通常會使用枚舉來定義業務上的一組常量,那除了簡單地定義常量之外,我們如何利用枚舉來實現高內聚、低耦合的設計呢?下面介紹下枚舉和策略模式、函數式接口的組合應用。 二、枚舉+策略模式
    的頭像 發表于 11-21 14:06 ?243次閱讀
    主站蜘蛛池模板: 4438x成人全国最大| 亚洲黄网在线| 中文字幕有码视频| 亚洲深夜| 欧美 亚洲 一区| 综合第一页| 五月激情婷婷综合| 色色视频网| 六月婷婷久久| 国产3p在线播放| 天天做天天操| 国产在线综合网| 68日本xxxxxxxxx777| 国产精品久久久久久久久齐齐| 亚洲字幕久久| 色爽爽爽爽爽爽爽爽| 久久婷婷是五月综合色狠狠| 爱啪网站| 欧美在线视频看看| 欧美xx高清| 99热手机在线观看| 热99在线视频| 亚洲婷婷影院| 欧美一级鲁丝片| 高清配种视频xxxxx| 天天综合天天色| 高清一级毛片一本到免费观看| 4438x成人全国| 亚洲人成a在线网站| 欧美有码视频| 国产va免费精品观看| 色偷偷尼玛图亚洲综合| 色涩在线| 一区二区三区四区精品| 九九re| 五月婷婷婷婷| 五月婷婷精品| 欧美两性网| 欧美日韩a级a| 成 人色 网 站 欧美大片在线观看| 天天色天天看|