首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

設計模式精講:策略模式——算法封裝與動態切換的最佳實踐

     編輯:Java 相關知識

策略模式定義一組算法,將每個算法封裝起來並使它們可互換。它是對「組合優於繼承」原則的經典應用,讓算法的變化獨立於使用算法的客戶端。

一、 三大角色與結構

  • 環境角色:持有策略引用,對外提供統一入口,屏蔽具體策略細節。
  • 抽象策略:通常為接口,定義算法規範;若有公共邏輯可用抽象類(融合模板方法模式)。
  • 具體策略:實現特定算法,如快速排序、冒泡排序、不同支付方式等。

二、 經典代碼實現

interface SortStrategy { void sort(int[] arr); }

class QuickSort implements SortStrategy {
    public void sort(int[] arr) { /* 快排實現 */ }
}

class BubbleSort implements SortStrategy {
    public void sort(int[] arr) { /* 冒泡實現 */ }
}

class SortContext {
    private SortStrategy strategy;
    public SortContext(SortStrategy strategy) { this.strategy = strategy; }
    public void executeSort(int[] arr) { strategy.sort(arr); }
}

// 客戶端動態切換
SortContext ctx = new SortContext(new QuickSort());
ctx.executeSort(data);
ctx = new SortContext(new BubbleSort()); // 運行時切換
ctx.executeSort(data);

三、 與模板方法模式的關係

策略模式將算法委託給獨立對象(組合),模板方法模式在父類定義算法骨架(繼承)。實際中常結合:抽象策略用抽象類封裝公共邏輯,具體策略覆蓋關鍵步驟,形成「策略+模板」混合模式。

四、 優缺點與工程權衡

優點缺點
算法自由切換,運行時決策策略類過多(>5)維護成本高
消除大量條件分支,代碼清晰客戶端需知曉所有策略細節,違反迪米特法則
易於擴展新算法,符合開閉原則策略對象創建開銷(可用工廠/單例優化)

五、 適用場景與最佳實踐

  • 多種相似算法/行為需動態選擇(排序、壓縮、支付、路由)。
  • 類之間主要邏輯相同,僅部分算法不同。
  • 工程建議:結合工廠模式封裝策略創建;策略類較多時考慮註解掃描或 SPI 機制自動註冊;無狀態策略可用單例/枚舉優化內存。

六、 總結

策略模式是面向對象多態思想的直接體現,將「做什麼」與「怎麼做」分離。善用它能讓系統在面對算法變化時保持優雅、可擴展,是消除 if-else 條件鏈的利器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved