精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

又污又黄的网站| 成人做爰视频网站| 韩国美女久久| 国产农村妇女精品| 成人精品在线视频| 久草视频在线资源| 国产一区二区三区网| 欧美精品丝袜中出| 尤物av无码色av无码| 在线看av的网址| 成人高清伦理免费影院在线观看| 日本道色综合久久影院| 三级黄色免费观看| 天堂在线精品| 日韩一区二区电影在线| 成人在线看视频| 日本在线视频网址| 日本一区二区三区国色天香| 99电影在线观看| 日韩久久久久久久久久| 在线免费观看欧美| 中文字幕少妇一区二区三区| 美国黄色一级视频| 在线观看亚洲精品福利片| 精品久久久久久久久久久久久 | 亚洲成av人片一区二区| 亚洲精品一区二| 天堂a中文在线| 成人免费高清在线观看| 成人国产精品日本在线| 国产污视频在线看| 久久不卡国产精品一区二区| 欧美草草影院在线视频| 一区二区免费av| 91精品论坛| 亚洲第一成年网| 神马影院我不卡午夜| 色噜噜一区二区三区| 国产一区二区三区免费| 国产精品人人做人人爽| 欧美精品韩国精品| 亚洲视频www| 久久久亚洲网站| 欧美片一区二区| 亚洲午夜精品一区 二区 三区| 中文字幕国产亚洲| 国产真实乱人偷精品人妻| 女同久久另类99精品国产| 欧美不卡一区二区三区| 久久久久亚洲av无码麻豆| 福利一区二区免费视频| 欧洲生活片亚洲生活在线观看| 丰满人妻中伦妇伦精品app| 麻豆蜜桃在线观看| 欧美视频不卡中文| av免费中文字幕| 亚洲欧洲美洲av| 日韩欧美在线播放| 国产天堂在线播放| 日本另类视频| 欧美在线高清视频| 久久国产这里只有精品| 视频欧美精品| 欧美一卡2卡三卡4卡5免费| 五月天婷婷在线观看视频| 亚洲精品一区av| 欧美一区二区三区男人的天堂| 99999精品| 一级毛片精品毛片| 亚洲精品一区二区三区99| 色哟哟无码精品一区二区三区| 国产精伦一区二区三区| 精品视频偷偷看在线观看| 丰腴饱满的极品熟妇| 清纯唯美日韩| 免费av在线一区| 日本三级欧美三级| 久久久久国内| 成人精品福利视频| 丰满人妻一区二区三区免费视频 | 久久亚洲精品欧美| 波多野结衣在线影院| 国产精品你懂的| 国产成人艳妇aa视频在线| 中文字幕在线直播| 欧美撒尿777hd撒尿| 亚洲熟女乱综合一区二区| 狼人精品一区二区三区在线| 亚洲欧美日韩中文在线| 欧美色图17p| 激情综合视频| 国产精品久久久精品| 999国产精品视频免费| 成人精品gif动图一区| 日本在线观看一区二区三区| 国产黄色小视频在线| 亚洲最大成人综合| 国产av人人夜夜澡人人爽| 国产精品高清一区二区| 亚洲精品美女在线| 中文字幕无码日韩专区免费| 亚洲美女色禁图| 国产日韩av在线| 色呦呦中文字幕| 国产精品久久久久久久久快鸭| 97超碰国产精品| 国产经典一区| 亚洲国产毛片完整版| 日韩精品久久久久久久的张开腿让| 国产精品hd| 国产精品一区二区三区毛片淫片| 神马一区二区三区| 亚洲免费观看视频| 丝袜制服一区二区三区| 国产成人福利av| 久久精品视频在线播放| 99超碰在线观看| 成人sese在线| mm131午夜| 欧美视频免费看| 亚洲欧美精品一区| 国产福利久久久| 国产一区二区三区在线观看精品 | 极品白嫩的小少妇| 99精品在线观看| 日本一区二区三区在线播放| 亚洲欧美激情国产综合久久久| 中文字幕佐山爱一区二区免费| 日韩中文字幕二区| 露出调教综合另类| 欧美精品成人在线| 精品国产18久久久久久| 中文字幕免费不卡在线| 国产一区视频免费观看| 欧美日韩导航| 久久久久久久成人| www.色婷婷.com| 亚洲精品一二三四区| 成人日韩在线视频| 欧美精选视频在线观看| 国产成人精品免费久久久久| 亚洲欧美日韩动漫| 五月天一区二区| 91视频在线免费| 伊人成年综合电影网| 亚洲在线第一页| www视频在线看| 7777女厕盗摄久久久| 91香蕉国产视频| 狠狠色丁香婷婷综合| 在线电影看在线一区二区三区| 美女网站视频一区| 亚洲色图综合网| 成年人视频免费| 国产欧美精品区一区二区三区| 日本熟妇人妻xxxxx| 精品久久中文| 成人午夜两性视频| 亚洲妇熟xxxx妇色黄| 欧美第一区第二区| 日韩av综合在线| 久久精品在这里| 中文字幕网av| 天天综合一区| 国产精品免费视频一区二区| 成人ssswww在线播放| 亚洲女人被黑人巨大进入| 波多野结衣一区二区三区四区| 中文字幕精品在线不卡| 国产精品自在自线| 国内精品福利| 鲁鲁狠狠狠7777一区二区| 亚洲www啪成人一区二区| 日韩中文字幕网| 精品黑人一区二区三区在线观看| 一区二区三区久久久| 精品国产av色一区二区深夜久久| 久久精品电影| 在线成人av电影| 精品中国亚洲| 国产精品天天狠天天看| 亚洲丝袜一区| 亚洲欧美国产va在线影院| 在线观看免费黄色小视频| 亚洲欧美日韩人成在线播放| caopor在线| 青椒成人免费视频| 国产美女作爱全过程免费视频| 亚洲国产精品嫩草影院久久av| 国产精品视频不卡| 国产网红在线观看| 一区二区三区视频观看| 亚洲产国偷v产偷v自拍涩爱| 粉嫩av一区二区三区免费野| 91麻豆精品久久毛片一级| 99久久综合国产精品| 依人在线免费视频| 亚洲作爱视频| 免费观看中文字幕| 亚洲另类春色校园小说| 91精品视频在线| 亚洲午夜天堂| 久99九色视频在线观看| 国产一级免费在线观看| 精品久久久久久久人人人人传媒 | 精品三级在线看| 特级西西444www高清大视频| 一区二区三区高清| 精品丰满少妇一区二区三区| 成人久久18免费网站麻豆| 亚洲免费999| 久久综合九色| xxxx18hd亚洲hd捆绑| 五月精品视频| 日韩三级电影网站| 特黄特色欧美大片| 99久re热视频这里只有精品6| 亚洲精品一级二级| 韩国精品久久久999| 成人片在线看| 久久精品视频导航| 992tv免费直播在线观看| 精品亚洲国产成av人片传媒| 亚洲黄色在线观看视频| 欧美日韩国产片| 中文字幕精品无| 色综合一个色综合| 亚洲精品视频在线观看免费视频| 亚洲三级电影全部在线观看高清| 欧美人妻一区二区三区| 久久夜色精品国产欧美乱极品| 无码国产精品一区二区免费式直播 | 久久这里只有精品视频网| 久久久久久婷婷| 国产成人av福利| 制服下的诱惑暮生| 国产乱码精品一品二品| 亚洲精品成人在线播放| 蜜芽一区二区三区| 色婷婷成人在线| 美国毛片一区二区三区| 国产福利影院在线观看| 日韩国产高清在线| 手机看片福利盒子久久| 日日摸夜夜添夜夜添精品视频| 日韩av资源在线| 久久综合导航| 99re精彩视频| 国产一区二区看久久| 中文字幕一区二区三区四| 狠狠色综合日日| 日本一二三四区视频| 国产精品一区二区久久精品爱涩| 性久久久久久久久久久久久久| 激情国产一区二区 | 91老师国产黑色丝袜在线| 欧美一级片黄色| 久久亚洲影视婷婷| 欧美日韩中文字幕视频| 国产精品电影一区二区三区| 呻吟揉丰满对白91乃国产区| 国产精品久久久久9999吃药| 国产精品嫩草影院俄罗斯| 亚洲精品成人在线| 久久久久久久久久综合| 欧美日韩国产精品一区二区三区四区 | www.xxxx日本| 亚洲在线一区二区三区| 制服.丝袜.亚洲.中文.综合懂色| 色综合久久中文综合久久97| 探花国产精品一区二区| 在线不卡的av| 特黄视频在线观看| 国产亚洲精品美女久久久| 麻豆网站在线| 午夜伦理精品一区| 全球最大av网站久久| 亚洲综合色av| 亚洲尤物av| 亚洲小说欧美另类激情| 亚洲久久视频| 999精彩视频| 国产91露脸合集magnet| b站大片免费直播| 一区二区三区四区五区视频在线观看| 日本三级欧美三级| 欧美日韩国产综合草草| 欧美熟妇交换久久久久久分类 | 777xxx欧美| 精品欧美色视频网站在线观看| 日本韩国欧美在线| 国产精品久久久久久免费播放| 精品国产乱码久久久久久牛牛| 日本人妖在线| 九九热在线精品视频| 香蕉久久免费电影| 97se视频在线观看| 国产一区二区三区日韩精品 | 欧美大片一区| 国产三级三级三级看三级| 国产伦精品一区二区三区在线观看| 在线视频 日韩| 成人免费一区二区三区在线观看| 日韩三级av在线| 在线成人av网站| jyzzz在线观看视频| 午夜精品蜜臀一区二区三区免费| 日本免费一区二区三区等视频| 精品毛片久久久久久| 亚洲欧美色图| www.com操| 久久精品在线免费观看| 国产主播在线播放| 制服丝袜av成人在线看| 国产一二三在线观看| 97av在线视频免费播放| 日本亚洲视频| 美国av在线播放| 看电视剧不卡顿的网站| 国精产品一区一区三区免费视频| 亚洲成人精品一区| www.久久精品.com| 久久精品国产欧美亚洲人人爽| 久久久人成影片一区二区三区在哪下载| 国产精品xxxx| 欧美精品偷拍| 不卡的一区二区| 亚洲女人的天堂| 国产精品熟女久久久久久| 中文字幕成人在线| 2019年精品视频自拍| 欧美日韩喷水| 美女黄色成人网| 极品人妻一区二区三区| 黄网站色欧美视频| 天堂а在线中文在线无限看推荐| 国内精品模特av私拍在线观看| 亚洲小说春色综合另类电影| a级网站在线观看| 久久99在线观看| 秋霞欧美一区二区三区视频免费| 在线视频国内自拍亚洲视频| 九九九伊在人线综合| 国产成人精品日本亚洲专区61| 亚洲婷婷丁香| 免费在线观看日韩视频| 久久久久久久久久久久久久久99 | 成人在线视频亚洲| 91丝袜美腿美女视频网站| 88国产精品视频一区二区三区| 亚洲激情在线看| 亚洲精品中文在线观看| 亚洲xxxx天美| 欧美影院在线播放| 国产一区二区精品福利地址| 欧美日韩怡红院| 中文字幕日本乱码精品影院| 国产精品久久久久久久免费| 欧美另类老女人| 精品成人自拍视频| 久久久久久久久久久福利| 国产日韩亚洲欧美综合| 中文字幕av片| 欧美情侣性视频| 精品少妇3p| 久久精品免费网站| 亚洲天堂2014| 日韩一级中文字幕| 国产福利精品在线| 一区二区在线影院| 欧产日产国产精品98| 一本大道久久a久久精品综合| 成人av电影观看| 97国产超碰| 久久青草久久| 天天色影综合网| 亚洲国产成人精品一区二区| 奇米777日韩| 男女h黄动漫啪啪无遮挡软件| 成人毛片在线观看| 久久这里只有精品9| 欧美猛交免费看| 要久久电视剧全集免费| 天天看片天天操| 欧美日韩国产精品一区二区不卡中文| 69av在线| 精品国产一区二区三区麻豆免费观看完整版 | 国产欧美日韩精品在线| jlzzjlzz亚洲女人18| 91精品国产色综合久久不卡98| 日韩在线不卡| 欧美一级片黄色| 91麻豆精品国产自产在线观看一区 | 51视频国产精品一区二区| 日韩中字在线| 熟妇高潮精品一区二区三区| 在线播放日韩导航| 日韩伦理三区| 日韩精品在线中文字幕| 国产精品色哟哟|