欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

設(shè)計模式-策略模式

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

作者:京東工業(yè) 孫磊

一、概念

策略模式(Strategy Pattern)也稱為(Policy Parttern)。 它定義了算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變換,不會影響到使用算法的客戶。策略模式屬性行為模式。

二、實際應(yīng)用

業(yè)務(wù)場景:業(yè)務(wù)需要監(jiān)聽多種消息,將接收到的消息更新到同一個ES中,不同的消息類型使用不同的策略處理,補充不同的數(shù)據(jù)信息,更新到ES中,供商家搜索和統(tǒng)計使用。

代碼實現(xiàn)結(jié)合spring框架、簡單工廠和策略模式一起使用。

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

多個實現(xiàn)類

// 價格策略實現(xiàn)
@Service
public class PriceExecuteServiceImpl implements GatherExecuteService {    
    @Override    
    public boolean execute(GatherDataVo gatherDataVo) {
         .....具體實現(xiàn)代碼省略   
    }
}
// 商品策略實現(xiàn)
@Service
public class ProductExecuteServiceImpl implements GatherExecuteService {  

    @Override    
    public boolean execute(GatherDataVo gatherDataVo) {  

        .....具體實現(xiàn)代碼省略  
    }
}
// 庫存策略實現(xiàn)
@Service
public class StockExecuteServiceImpl implements GatherExecuteService {    
    @Override    
    public boolean execute(GatherDataVo gatherDataVo) {   
     .....具體實現(xiàn)代碼省略  

     }
}

使用枚舉存儲策略實現(xiàn)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;    
    }
}

使用到不同策略的代碼

// 根據(jù)消息類型獲取不同策略類,然后使用spring的ApplicationContext獲取bean,達到執(zhí)行不同策略的目的。
String serviceName = MessageTypeEnum.getServiceName(gatherDataVo.getMessageType());
if (StringUtils.isNotBlank(serviceName)) {  
    GatherExecuteService gatherExecuteService = (GatherExecuteService) SpringContextUtil.getBean(serviceName,                      GatherExecuteService.class);  
}

策略模式是一種比較簡單的設(shè)計模式,工作中經(jīng)常和其他設(shè)計模式一塊使用。簡單的應(yīng)用記錄分享一下。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4823

    瀏覽量

    68988
收藏 人收藏

    評論

    相關(guān)推薦

    一文詳解前端常用設(shè)計模式

    設(shè)計模式一直是程序員談?wù)摰摹案叨恕痹掝}之一,總有一種敬而遠之的心態(tài)。在了解后才知道在將函數(shù)作為一等對象的語言中,有許多需要利用對象多態(tài)性的設(shè)計模式,比如單例模式、 策略
    的頭像 發(fā)表于 11-30 10:19 ?1653次閱讀
    一文詳解前端常用設(shè)計<b class='flag-5'>模式</b>

    關(guān)于LVOOP設(shè)計模式的框架問題?

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

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

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

    混合導(dǎo)通模式BoostPFC的控制策略研究

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

    封裝變化與面向接口編程

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

    不會有人不知道怎么優(yōu)雅的替換if-else語句吧

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

    設(shè)計模式最佳實踐探索—策略模式

    根據(jù)不同的應(yīng)用場景與意圖,設(shè)計模式主要分為創(chuàng)建型模式、結(jié)構(gòu)型模式和行為型模式三類。本文主要探索行為型模式中的
    的頭像 發(fā)表于 10-31 14:24 ?995次閱讀

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

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

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

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

    高頻使用的幾種設(shè)計模式

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

    設(shè)計模式行為型:策略模式

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

    迭代模式在UVM中的應(yīng)用有哪些

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

    什么是策略模式

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

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

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

    Java 枚舉與策略模式、函數(shù)式接口的結(jié)合:實現(xiàn)高內(nèi)聚低耦合的設(shè)計

    中,通常會使用枚舉來定義業(yè)務(wù)上的一組常量,那除了簡單地定義常量之外,我們?nèi)绾卫妹杜e來實現(xiàn)高內(nèi)聚、低耦合的設(shè)計呢?下面介紹下枚舉和策略模式、函數(shù)式接口的組合應(yīng)用。 二、枚舉+策略模式
    的頭像 發(fā)表于 11-21 14:06 ?278次閱讀