<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

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

      策略模式(Strategy Pattern)

      策略模式是一種行為設(shè)計模式,它定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,從而讓算法的變化獨立于使用它們的客戶端代碼。

      策略模式的核心在于為算法的實現(xiàn)提供統(tǒng)一的接口,并通過動態(tài)選擇具體實現(xiàn)來實現(xiàn)靈活性。

      組成部分

      1. Context(上下文類):
        持有對某個策略對象的引用,并定義客戶端需要的接口,負(fù)責(zé)在運行時動態(tài)切換策略。

      2. Strategy(策略接口):
        定義所有支持的算法的公共接口。

      3. ConcreteStrategy(具體策略實現(xiàn)):
        實現(xiàn) Strategy 接口的具體算法。

      代碼示例

      以下是使用策略模式實現(xiàn)不同的支付方式的動態(tài)切換。信用卡支付和微信支付的動態(tài)切換。

      類圖

      image

      策略接口

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

      具體策略實現(xiàn)

      // 具體策略實現(xiàn) - 信用卡支付
      public class CreditCardPayment implements PaymentStrategy {
          private String cardNumber;
      
          public CreditCardPayment(String cardNumber) {
              this.cardNumber = cardNumber;
          }
      
          @Override
          public void pay(int amount) {
              System.out.println("交易金額 " + amount + " 使用的卡號: " + cardNumber);
          }
      }
      // 具體策略實現(xiàn) - 微信支付
      public class WxPayment implements PaymentStrategy {
          private String phoneNumber;
      
          public WxPayment(String phoneNumber) {
              this.phoneNumber = phoneNumber;
          }
      
          @Override
          public void pay(int amount) {
              System.out.println("交易金額 " + amount + " 使用的手機號: " + phoneNumber);
          }
      }
      

      上下文

      // 上下文類
      public class PaymentContext {
          private PaymentStrategy strategy;
      
          public PaymentContext(PaymentStrategy strategy) {
              this.strategy = strategy;
          }
      
          public void setStrategy(PaymentStrategy strategy) {
              this.strategy = strategy;
          }
      
          public void executePayment(int amount) {
              strategy.pay(amount);
          }
      }
      

      測試代碼

      public class StrategyPatternDemo {
          public static void main(String[] args) {
              // 使用信用卡支付
              PaymentContext context = new PaymentContext(new CreditCardPayment("1234-5678-9012-3456"));
              context.executePayment(100);
      
              // 切換到Wx支付
              context.setStrategy(new WxPayment("13112345678"));
              context.executePayment(200);
          }
      }
      

      測試結(jié)果

      交易金額 100 使用的卡號: 1234-5678-9012-3456

      交易金額 200 使用的手機號: 13112345678

      優(yōu)缺點和適用場景

      優(yōu)點

      1. 開放-封閉原則: 新的策略可以在不修改現(xiàn)有代碼的情況下添加。

      2. 提高代碼靈活性: 可以動態(tài)地在運行時選擇算法。

      3. 消除冗長的條件分支: 使用策略模式代替 if-elseswitch-case 條件判斷。

      缺點

      1. 類的數(shù)量增加: 每個策略需要定義一個類,可能導(dǎo)致類數(shù)量增多。

      2. 客戶端需要知道所有策略: 客戶端必須了解策略的作用并選擇合適的策略。

      適用場景

      1. 多個算法只有在行為上稍有不同的情況下。
      2. 需要動態(tài)選擇算法或者行為的情況下。
      3. 避免使用條件語句(if-elseswitch-case)來管理算法時。

      實際應(yīng)用

      1. 數(shù)據(jù)加密算法選擇(AES、RSA等)
      2. 數(shù)據(jù)壓縮算法(ZIP、GZIP)
      3. 不同類型的文件解析(JSON、XML、YAML)

      策略模式與其他模式的對比

      1. 狀態(tài)模式: 狀態(tài)模式的行為是狀態(tài)驅(qū)動的,而策略模式的行為是由客戶端選擇驅(qū)動的。

      2. 工廠模式: 工廠模式用于創(chuàng)建對象,而策略模式關(guān)注的是行為的動態(tài)切換。

      3. 橋接模式: 橋接模式側(cè)重于分離抽象和實現(xiàn)及多維度的擴(kuò)展;而策略模式用于封裝算法或行為,單維度的擴(kuò)展。

      4. 裝飾模式: 使用一系列裝飾器類,通過組合的方式增強對象的功能。裝飾器的核心在于“增強”。

      5. 策略模式: 客戶端在運行時選擇合適的策略來完成特定任務(wù)。策略模式的核心在于“替換”。

      總結(jié)

      策略設(shè)計模式定義了一系列算法(策略),將每個算法封裝到獨立的策略類中,并通過上下文類動態(tài)地選擇和使用不同的策略,從而讓算法的變化獨立于使用算法的客戶端。

      image

      需要查看往期設(shè)計模式文章的,可以在個人主頁中或者文章開頭的集合中查看,可關(guān)注我,持續(xù)更新中。。。


      超實用的SpringAOP實戰(zhàn)之日志記錄

      2023年下半年軟考考試重磅消息

      通過軟考后卻領(lǐng)取不到實體證書?

      計算機算法設(shè)計與分析(第5版)

      Java全棧學(xué)習(xí)路線、學(xué)習(xí)資源和面試題一條龍

      軟考證書=職稱證書?

      軟考中級--軟件設(shè)計師毫無保留的備考分享

      posted @ 2025-01-15 09:35  淵渟岳  閱讀(2408)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲精品久久| 久久综合精品成人一本| 国产午夜福利视频在线| 日本少妇xxx做受| 亚洲肥熟女一区二区三区| 麻豆成人传媒一区二区| 亚洲欧洲日韩国内精品| 久久碰国产一区二区三区| 中文日产幕无线码一区中文| 久久天天躁狠狠躁夜夜2020老熟妇| 亚洲精品一区二区三区免| 蜜臀午夜一区二区在线播放| 久久香蕉国产线看观看怡红院妓院| 苏州市| 亚洲热线99精品视频| 国产gaysexchina男外卖| 久久这里只有精品免费首页| 香蕉久久久久久久av网站| 久爱www人成免费网站| 亚洲精品动漫免费二区| 成人网站免费观看永久视频下载| 青青草成人免费自拍视频| 少妇高潮喷水惨叫久久久久电影 | 亚洲精品一区二区三区色| 成人网站免费观看永久视频下载| 亚洲AV无码精品色午夜果冻| 岛国最新亚洲伦理成人| 亚洲中文无码手机永久| 中文字幕乱偷无码av先锋蜜桃| 成武县| 草草浮力影院| 阳谷县| 亚洲色大成网站www永久男同| 国产亚洲精品久久久久婷婷图片 | 欧洲亚洲精品免费二区| 国内精品久久久久电影院| 免费看男女做好爽好硬视频 | 老司机亚洲精品一区二区| 国产精品一二三区久久狼| 呼和浩特市| 国产成人精品无码播放|