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

Java 設計模式:策略模式完整指南與三國演義實戰案例

     編輯:Java 相關知識

策略模式將「演算法族群」封裝為可互換的類別,讓客戶端在執行時動態切換策略。本文以「諸葛亮三個錦囊妙計」為情境,完整展示介面、具體策略、Context 封裝類、客戶端切換邏輯,並分析優缺點、適用場景與避免過度設計的原則。

三大核心角色

  • Strategy(抽象策略):定義演算法介面,如 IStrategy { void operate(); }。
  • ConcreteStrategy(具體策略):各個演算法實作(錦囊一、二、三)。
  • Context(封裝類/上下文):持有策略參考,對外提供統一 operate(),隔離高層模組與具體策略。

三國演義實戰程式碼

1. 抽象策略與三個錦囊

interface IStrategy { void operate(); }

class BackDoor implements IStrategy { // 錦囊一:找喬國老
    public void operate() { System.out.println("找喬國老施壓,孫權不敢殺劉備..."); }
}
class GivenGreenLight implements IStrategy { // 錦囊二:求吳國太
    public void operate() { System.out.println("求吳國太開綠燈,放行!"); }
}
class BlackEnemy implements IStrategy { // 錦囊三:孫夫人斷後
    public void operate() { System.out.println("孫夫人斷後,擋住追兵..."); }
}

2. Context 封裝類

class Context {
    private final IStrategy strategy;
    public Context(IStrategy s) { strategy = s; }
    public void operate() { strategy.operate(); }
}

3. 趙雲依計畫行事

public class ZhaoYun {
    public static void main(String[] args) {
        Context ctx;
        ctx = new Context(new BackDoor()); ctx.operate();      // 剛到吳國
        ctx = new Context(new GivenGreenLight()); ctx.operate(); // 劉備流連忘返
        ctx = new Context(new BlackEnemy()); ctx.operate();      // 孫權追兵至
    }
}

優缺點與設計取捨

優點缺點
策略類別可自由切換,符合開閉原則策略類過多(>5)維護成本高
避免大量 if-else/switch 判斷邏輯客戶端必須知曉所有策略細節,違反迪米特法則
易於單元測試各策略獨立邏輯若策略間有共同邏輯,需配合模板方法模式抽取

適用場景

  • 多個類別核心邏輯相同,僅部分演算法不同(如排序、壓縮、路由演算法)。
  • 客戶端需動態決定使用哪種演算法,且演算法族群相對穩定。

策略模式常與工廠模式、模板方法模式混用。實務上若策略少於 3 種且固定,直接 if-else 更簡潔;隨著策略增多或頻繁擴充,再重構為策略模式不遲。

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