精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一文搞懂設計模式—策略模式

開發(fā) 前端
策略模式是一種強大而靈活的設計模式,它可以幫助我們處理不同的算法或行為,并使系統(tǒng)更具可維護性和擴展性。通過封裝具體的策略類和使用上下文對象,我們可以輕松地選擇和切換不同的策略,而無需修改現(xiàn)有的代碼。

在軟件開發(fā)中,經(jīng)常會遇到需要根據(jù)不同的條件來實現(xiàn)不同行為的場景。這種場景下,策略模式(Strategy Pattern)就是一種非常有用的設計模式。

策略模式屬于行為型模式,允許我們定義一系列算法,并將其封裝在獨立的策略類中,使得它們可以互相替換。通過使用策略模式,我們能夠靈活地選擇和切換不同的算法,而無需修改原有的代碼,替代?量 if else 的邏輯。

使用場景

策略模式通常在以下情況下被使用:

  • 當存在多種實現(xiàn)方式,且需要在運行時動態(tài)選擇具體實現(xiàn)時,策略模式非常有用。例如,一個購物應用可能需要根據(jù)用戶的會員等級來計算折扣,不同等級對應不同的計算方式,這時就可以使用策略模式來實現(xiàn)。
  • 當存在一組類似的行為,只是實現(xiàn)細節(jié)略有不同,但又不希望通過繼承來添加新的子類時,策略模式也很適用。它將這組行為封裝在獨立的策略類中,并通過委托的方式在上下文對象中使用。

例如:

  • 支付方式選擇:一個電子商務平臺可以根據(jù)用戶的選擇來使用不同的支付策略,例如信用卡支付、支付寶支付、微信支付等。
  • 排序算法選擇:一個排序工具可以根據(jù)用戶的需求選擇不同的排序算法,例如快速排序、歸并排序等。
  • 數(shù)據(jù)驗證:一個表單驗證工具可以根據(jù)不同的驗證規(guī)則采用不同的驗證策略,例如長度驗證、格式驗證等。

這些只是策略模式的一些例子,實際應用場景非常豐富。通過使用策略模式,我們可以將算法或行為與具體的業(yè)務邏輯解耦,使得系統(tǒng)更加靈活和可擴展。

策略模式實現(xiàn)

在策略模式中,有三個核心角色:上下文(Context)、策略接口(Strategy)和具體策略類(Concrete Strategy)。

  • 上下文(Context):封裝了具體策略的執(zhí)行邏輯,提供給客戶端使用的接口。上下文通常包含一個指向策略接口的引用,用于調(diào)用具體策略的方法。
  • 策略接口(Strategy):定義了一組算法或行為的公共接口,所有具體策略都必須實現(xiàn)該接口。
  • 具體策略類(Concrete Strategy):實現(xiàn)了策略接口,提供了具體的算法或行為。

下面我們來實現(xiàn)一下策略模式:

步驟 1

創(chuàng)建策略接口。

//策略接口
public interface PaymentStrategy {
    void pay(double amount);
}

步驟2

創(chuàng)建策略接口實現(xiàn)類。

//具體策略類
public class CreditCardPayment implements PaymentStrategy {
    public void pay(double amount) {
        System.out.println("使用信用卡支付:" + amount);
        // 具體的支付邏輯
    }
}
public class WeChatPay implements PaymentStrategy {
    public void pay(double amount) {
        System.out.println("使用微信支付:" + amount);
        // 具體的支付邏輯
    }
}

注意:在實際項目中,我們一般通過工廠方法模式來實現(xiàn)策略類的聲明。

實現(xiàn)關系如下:

圖片圖片

步驟 3

創(chuàng)建 Context 類。

// 上下文類
public class PaymentContext {
    private PaymentStrategy paymentStrategy;
    
    public PaymentContext(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }
    
    public void pay(double amount) {
        paymentStrategy.pay(amount);
    }
}

調(diào)用一下:

// 使用示例
public class Main {
    public static void main(String[] args) {
        PaymentStrategy strategy = new CreditCardPayment();
        PaymentContext context = new PaymentContext(strategy);
        context.pay(100.0);
        
        strategy = new WeChatPay();
        context = new PaymentContext(strategy);
        context.pay(200.0);
    }
}

輸出:

使用信用卡支付:100.0
使用微信支付:200.0

在上面的代碼中,我們定義了一個 PaymentStrategy 接口作為策略接口,兩個具體的策略類 CreditCardPayment 和 WeChatPay 實現(xiàn)了該接口。然后,我們創(chuàng)建了一個 PaymentContext 上下文對象,并根據(jù)需要傳入不同的策略實例進行支付操作。

策略模式的優(yōu)缺點

策略模式的優(yōu)點包括:

  • 松耦合:策略模式將不同的策略封裝在獨立的類中,與上下文對象解耦,增加了代碼的靈活性和可維護性。
  • 易于擴展:可以通過添加新的策略類來擴展系統(tǒng)的功能,無需修改現(xiàn)有代碼。
  • 符合開閉原則:對于新的策略,無需修改上下文對象,只需要實現(xiàn)新的策略接口即可。

策略模式的缺點包括:

  • 類數(shù)量增多:每個具體策略都需要一個獨立的類,如果策略較多,將導致類的數(shù)量增加。
  • 上層必須知道所有策略類:上層模塊必須知道有哪些策略,并選擇合適的策略進行使用,這與迪米特法則是相違背的,我只是想使用了一個策略,我憑什么就要了解這個策略呢?那要你的封裝類還有什么 意義?這是原裝策略模式的一個缺點。

注意事項: 如果一個系統(tǒng)的策略多于四個,就需要考慮使用混合模式,解決策略類膨脹的問題,否則日后的系統(tǒng)維護就會成為一個燙手山芋。

策略模式優(yōu)化

使用Map取消 Context 類

我們可以將策略實現(xiàn)類放進 Map 中,根據(jù) key 去選擇具體的策略,就不必事先定義 Context 類。

public static void main(String[] args) {
        Map<String, PaymentStrategy> map=new HashMap<>();
        map.put("CREDIT_CARD", new CreditCardPayment());
        map.put("WECHAT_PAY",new WeChatPay());

        map.get("CREDIT_CARD").pay(100.0);
        map.get("WECHAT_PAY").pay(200.0);
    }

策略枚舉解決策略類膨脹

策略枚舉可以解決策略類過多的問題。

我們對原裝的策略模式進行改造,把原有定義在抽象策略中的方法移植到枚舉中,讓枚舉成員成為一個具體策略。

@Slf4j
public enum PaymentStrategyEnum {
    CREDIT_CARD {
        @Override
        public void pay(double amount) {
            log.info("使用信用卡支付:" + amount);
            // 具體的支付邏輯
        }
    },
    WECHAT_PAY {
        @Override
        public void pay(double amount) {
            log.info("使用微信支付:" + amount);
            // 具體的支付邏輯
        }
        
    };

    public abstract void pay(double amount);
}

在上面的代碼中,我們定義了一個枚舉類型 PaymentStrategy,其中包含兩個枚舉常量 CREDIT_CARD 和 WECHAT_PAY。每個枚舉常量都重寫了 pay() 方法,用于具體的支付邏輯。

// 使用示例
public static void main(String[] args) {
        Map<String, PaymentStrategyEnum> map=new HashMap<>();
        map.put("CREDIT_CARD",  PaymentStrategyEnum.CREDIT_CARD);
        map.put("WECHAT_PAY", PaymentStrategyEnum.WECHAT_PAY);

        map.get("CREDIT_CARD").pay(100.0);
        map.get("WECHAT_PAY").pay(200.0);
    }

注意:策略枚舉是一個非常優(yōu)秀和方便的模式,但是它受枚舉類型的限制,每個枚舉項都是 public、final、static 的,擴展性受到了一定的約束,因此在系統(tǒng)開發(fā)中,策略枚舉一般擔當不經(jīng)常發(fā)生變化的角色。

SpringBoot中的策略模式

SpringBoot中使用策略模式更加方便:

public interface Test {
    void print(String name);
}
@Service("testA")
@Slf4j
public class TestA implements Test{
    @Override
    public void print(String name) {
        log.info("實現(xiàn)類A"+name);
    }
}
@Service("testB")
@Slf4j
public class TestB implements Test{
    @Override
    public void print(String name) {
        log.info("實現(xiàn)類B"+name);
    }
}

使用的時候 @Autowired 或者 @Resource 即可,SpringBoot會幫我們把實現(xiàn)類自動注入注入Map。

@Resource
private Map<String,Test> map;
Test test = map.get("你想拿出的具體策略類");
test.print("hello world");

總結(jié)

策略模式是一種強大而靈活的設計模式,它可以幫助我們處理不同的算法或行為,并使系統(tǒng)更具可維護性和擴展性。通過封裝具體的策略類和使用上下文對象,我們可以輕松地選擇和切換不同的策略,而無需修改現(xiàn)有的代碼。

責任編輯:武曉燕 來源: Java隨想錄
相關推薦

2023-05-22 13:27:17

2024-02-19 13:11:38

門面模式系統(tǒng)

2024-02-26 11:52:38

代理模式設計

2024-02-27 11:59:12

享元模式對象

2024-02-04 12:04:17

2024-02-21 12:24:33

模板設計模式框架

2024-01-30 13:15:00

設計模式責任鏈

2024-02-23 12:11:53

裝飾器模式對象

2024-02-20 12:09:32

模式工廠方法接口

2024-02-22 12:13:49

適配器模式代碼

2024-02-18 12:36:09

2022-05-05 16:47:24

Docker網(wǎng)絡空間容器

2025-06-30 00:32:43

策略模式算法MyBatis

2022-09-21 16:56:16

設計模式微服務架構(gòu)

2024-04-12 12:19:08

語言模型AI

2022-03-24 08:51:48

Redis互聯(lián)網(wǎng)NoSQL

2020-11-17 09:32:57

設計模式責任鏈

2013-11-26 16:09:34

Android設計模式

2020-11-10 09:20:40

開發(fā)模式代碼

2021-03-22 10:05:59

netstat命令Linux
點贊
收藏

51CTO技術棧公眾號

欧美乱大交做爰xxxⅹ小说| 神马影院我不卡午夜| 日韩成人免费在线观看| 久久不见久久见中文字幕免费| 日韩欧美亚洲成人| 三年中文高清在线观看第6集| 午夜精品久久久久久久第一页按摩| 亚洲精选一区| 国产一区二区三区91| 91小视频免费观看| 成人激情av在线| 国产一级淫片免费| 郴州新闻综合频道在线直播| 日韩精品综合一本久道在线视频| 国产精品亚洲二区在线观看| av网站在线免费| 久久久精品影视| **亚洲第一综合导航网站| 亚洲男人的天堂在线视频| 亚洲五月综合| 亚洲天堂男人的天堂| 少妇搡bbbb搡bbb搡打电话| 深夜视频一区二区| 午夜国产精品影院在线观看| 国产大尺度在线观看| 黄色电影免费在线看| 成人美女视频在线观看| 成人激情春色网| 男人天堂视频网| 国产日韩专区| 国精产品一区一区三区有限在线| 亚洲ⅴ国产v天堂a无码二区| 欧美成人午夜77777| 欧美一区二区三区人| 天天综合网久久| 88xx成人免费观看视频库| 亚欧色一区w666天堂| 在线视频一二三区| 欧美13一16娇小xxxx| 久久久国产午夜精品| 国产综合18久久久久久| 精品久久国产视频| 国产久卡久卡久卡久卡视频精品| 国产精品91在线| 精品免费囯产一区二区三区 | 久久精品国产999大香线蕉| 欧美最猛性xxxxx(亚洲精品)| 久久久精品国产一区二区| 免费黄色日本网站| 韩国成人二区| 欧美日韩裸体免费视频| 日韩av三级在线| av在线中出| 午夜精品福利视频网站| 久久国产精品网| av伦理在线| 香蕉成人伊视频在线观看| 精品成在人线av无码免费看| 黄色美女视频在线观看| 亚洲综合色视频| 高清欧美精品xxxxx| 搞黄网站在线看| 婷婷夜色潮精品综合在线| 欧洲精品一区二区三区久久| 成人影院在线视频| 欧美性xxxxxx| 日本熟妇人妻中出| 国产69精品久久| 欧美嫩在线观看| a级大片免费看| 久久狠狠久久| 亚洲一级一级97网| 国产又粗又长又黄的视频| 亚洲情侣在线| 国自在线精品视频| 亚洲欧美另类在线视频| 欧洲免费在线视频| 亚洲在线一区| 国产精品久久久久久久7电影| 中文字幕一区二区久久人妻| 国精产品一区一区三区mba视频| 亚洲影影院av| 桃花色综合影院| 国产精品毛片无遮挡高清| 好色先生视频污| 色在线视频观看| 欧美视频自拍偷拍| 国产成人av片| 蜜臀av免费一区二区三区| 日韩在线视频观看| 久久久国产精品人人片| 老鸭窝91久久精品色噜噜导演| 国产日韩在线看片| 日本高清视频网站| 亚洲国产精品成人综合色在线婷婷| 黄色一级片网址| 小早川怜子影音先锋在线观看| 欧美伊人精品成人久久综合97| 日本女人黄色片| 奇米狠狠一区二区三区| 久久伊人精品视频| 中文字幕在线欧美| 国产精品69毛片高清亚洲| 久久精品第九区免费观看| 视频一区二区三区免费观看| 国产尤物视频在线| 一区二区三区日本| 一区二区三区入口| 国产精品自在线拍| 中日韩美女免费视频网站在线观看| 欧美精品一区二区成人| 免费的成人av| 久久综合狠狠综合久久综青草| 国产淫片在线观看| 91精品福利视频| 完美搭档在线观看| 久久久久久久久久久9不雅视频 | 久久无码精品丰满人妻| 日本麻豆一区二区三区视频| 国产精品日韩一区二区免费视频| 老司机福利在线视频| 91久久线看在观草草青青 | 成人黄色av网址| 日韩视频免费看| 午夜精品一区二| 成人国产精品免费观看动漫| 精品少妇人妻av一区二区| 亚洲成人不卡| 亚洲男人的天堂在线播放| 毛片a片免费观看| 国产一区二区三区久久悠悠色av | 99reav在线| 日韩欧美亚洲成人| 亚洲av无码一区二区三区观看 | 免费a级人成a大片在线观看| 国产精品人妖ts系列视频| 国产精品沙发午睡系列| 成人av动漫| 欧美疯狂性受xxxxx另类| 国产成人久久精品77777综合| 中文字幕在线观看不卡视频| 日本a√在线观看| 欧美美乳视频| 国产激情久久久久| 国产对白叫床清晰在线播放| 91精品1区2区| av网在线播放| 欧美bbbbb| 亚洲天堂电影网| 国产成人亚洲一区二区三区| 国产一区二区三区直播精品电影 | 日韩影院精彩在线| 欧美视频观看一区| 香蕉成人影院| 日韩中文字幕亚洲| 99久久精品国产成人一区二区 | 国产一区一区| 欧美成人在线影院| 俄罗斯嫩小性bbwbbw| 亚洲成av人片在线观看无码| 手机在线成人av| 国产精品久久久久久久免费软件| 久久精品ww人人做人人爽| japanese23hdxxxx日韩| 在线亚洲欧美视频| 一级片视频网站| 一区二区三区国产| 国产男女猛烈无遮挡a片漫画| 视频一区二区三区入口| 亚洲色图自拍| 国产精东传媒成人av电影| 57pao国产成人免费| 99青草视频在线播放视| 日韩女优av电影| 精品欧美一区二区三区免费观看 | 精品一区免费观看| 久久影院电视剧免费观看| 亚洲激情在线观看视频| 亚洲欧美综合久久久| 激情欧美一区二区三区中文字幕| 最新日韩三级| 久久久精品国产亚洲| 手机在线观看毛片| 在线观看免费视频综合| 欧美成人一区二区三区高清| 日本性爱视频在线观看| 亚洲美女在线国产| 大地资源二中文在线影视观看| 久久精选视频| 中文字幕日韩一区二区三区| 理论片一区二区在线| 国产成人啪精品视频免费网| 国产欧美久久久久久久久| 亚洲韩国欧洲国产日产av| 久久精品偷拍视频| 亚洲一区二区精品久久av| 亚洲熟妇无码av| 国产精品一二三在| 久久精品一区二| 中文字幕一区二区av| 久久久7777| 一区二区精彩视频| 国产日韩在线观看av| 麻豆mv在线观看| 久久中文久久字幕| 精品福利视频导航大全| 精品国产91洋老外米糕| 国产裸体美女永久免费无遮挡| 亚洲国产日韩一区二区| 精品一区二区在线观看视频| 91免费国产视频网站| 中文字幕在线观看91| 另类欧美日韩国产在线| 日本免费黄视频| 欧美日韩影院| 欧美一级免费在线观看| 精品一区电影| 久久影院理伦片| 国偷自产视频一区二区久| 91在线高清视频| 国产精品第一| 国产精品jizz在线观看麻豆| 乱馆动漫1~6集在线观看| 欧美高清性猛交| 国产福利视频在线| 日韩亚洲一区二区| 国产在线超碰| 亚洲免费电影一区| 污视频在线免费| 精品国产一区二区在线观看| 99国产在线播放| 欧美高清视频www夜色资源网| 日韩欧美国产另类| 一本久久综合亚洲鲁鲁五月天| 日韩黄色三级视频| 亚洲午夜精品一区二区三区他趣| 91视频综合网| 亚洲视频 欧洲视频| 免费成人美女女在线观看| 欧美国产精品专区| 神马久久久久久久久久久| 2023国产一二三区日本精品2022| 无码任你躁久久久久久老妇| 波多野结衣视频一区| 国产污在线观看| 成人av一区二区三区| 国产日韩视频一区| av不卡一区二区三区| 亚洲欧美日本一区| 91在线云播放| 国产一二三四五区| 国产欧美日韩中文久久| 日韩精品无码一区二区三区久久久| 2017欧美狠狠色| 亚洲日本精品视频| 国产精品你懂的| 久久噜噜色综合一区二区| 国内视频精品| 美女视频黄免费的亚洲男人天堂| 日本精品一区二区三区在线播放| 色婷婷综合久久久久| 国产一区久久精品| 欧美激情亚洲激情| 黄色在线免费观看网站| 国产成人亚洲综合青青| 欧美成人毛片| av在线不卡观看| 啪啪激情综合网| 日韩高清av电影| 欧美wwwww| 国产91在线亚洲| 99视频一区| 激情五月婷婷久久| 激情五月婷婷综合网| 性一交一黄一片| 99精品在线观看视频| 怡红院一区二区三区| 日韩毛片精品高清免费| 国产精品99re| 在线一区二区视频| 99精品在线看| 亚洲欧美在线看| 欧美边添边摸边做边爱免费| 国产做受高潮69| 国产精品99精品一区二区三区∴| 99re在线国产| 国产欧美日韩在线观看视频| 男插女免费视频| 国产一区二区三区久久久久久久久| 不卡的av中文字幕| 不卡影院免费观看| 日本黄色激情视频| 亚洲综合一区二区精品导航| 日本中文字幕在线| 日韩一区二区影院| 欧美zozo| 欧美大片第1页| 123成人网| 精品综合久久久| 亚洲精品99| 黄色av免费在线播放| 亚洲丁香日韩| 精品日韩一区二区三区免费视频| 免费观看成年人视频| 综合欧美国产视频二区| 无码小电影在线观看网站免费| 成人精品一区二区三区电影黑人 | 水蜜桃一区二区三区| 激情欧美丁香| 中文字幕视频三区| 久久夜色精品一区| 国产无遮挡又黄又爽又色| 欧美日韩专区在线| 飘雪影院手机免费高清版在线观看| 欧美xxxx综合视频| 免费一级欧美在线观看视频| 精品午夜一区二区三区| 欧美 日韩 国产精品免费观看| 88av.com| 91玉足脚交白嫩脚丫在线播放| 国产又黄又爽又无遮挡| 欧美探花视频资源| 国产最新视频在线| 欧美亚洲国产精品| 精品在线网站观看| 欧美午夜性视频| 国产69精品一区二区亚洲孕妇| 国产福利视频网站| 欧美日韩不卡在线| 国产系列在线观看| 日本中文字幕成人| 亚洲人成网亚洲欧洲无码| 高清欧美精品xxxxx| 成人免费av网站| 日本三级中文字幕| 欧美大片在线观看一区二区| 在线观看免费视频你懂的| 国产在线999| 91九色精品| 羞羞的视频在线| 国产精品久久久久婷婷二区次| 国内精品视频久久| 51一区二区三区| 日本在线成人一区二区| 视频在线观看国产精品| 伊人网在线视频观看| 色综合色狠狠天天综合色| 日本一本草久在线中文| 国产91|九色| 欧美激情在线免费| www.xxx亚洲| 国产精品盗摄一区二区三区| 在线免费观看高清视频| 日韩在线www| 麻豆一区在线| 六月婷婷激情综合| 成人97人人超碰人人99| av大片免费观看| 亚洲人成网站色ww在线| 精品无人乱码一区二区三区 | 91色中文字幕| 欧美在线看片| 久久久无码人妻精品无码| 亚洲3atv精品一区二区三区| 日本a一级在线免费播放| 国产精品爱啪在线线免费观看| 欧美精品一二| 亚洲色图偷拍视频| 亚洲图片欧美视频| 全色精品综合影院| 国产精品久久久久福利| 午夜影院欧美| 少妇熟女视频一区二区三区| 欧美性色xo影院| av免费在线一区二区三区| 91精品视频一区| 在线 亚洲欧美在线综合一区| 国产在线观看无码免费视频| 欧美日韩一区二区三区四区| 在线三级电影| 欧美日韩成人一区二区三区| 久久超碰97中文字幕| 久久久精品国产sm调教| 亚洲偷熟乱区亚洲香蕉av| 91麻豆成人精品国产免费网站| 国产蜜臀97一区二区三区 | 亚洲精品动漫| 在线视频欧美一区| av一二三不卡影片| 老熟妇一区二区三区啪啪| 欧美人成在线视频| 国产精品美女久久久久久不卡| 不卡中文字幕在线观看| 偷拍一区二区三区| 免费黄色在线| 免费日韩av电影| 国产麻豆精品一区二区| www.色国产| 久久久久亚洲精品| 青青草国产免费一区二区下载|