Java Strategy Pattern(策略模式)

在策略模式(Strategy Pattern)中,一個類的行為或其算法可以在運行時更改。這種類型的設計模式屬于行為型模式。
在策略模式中,我們創建表示各種策略的對象和一個行為隨著策略對象改變而改變的 context 對象。策略對象改變 context 對象的執行算法。

關鍵代碼:實現同一個接口。

優點: 1、算法可以自由切換。 2、避免使用多重條件判斷。 3、擴展性良好。
缺點: 1、策略類會增多。 2、所有策略類都需要對外暴露。

注意事項:如果一個系統的策略多于四個,就需要考慮使用混合模式,解決策略類膨脹的問題。

  1. 創建一個接口。
/**
 * 1. 創建一個接口
 * @author mazaiting
 */
public interface Strategy {
    /**
     * 算法
     */
    int doOperation(int num1, int num2);
}
  1. 創建實現接口的實體類。
/**
 * 2. 創建實現接口的實體類。
 * @author mazaiting
 */
public class OperationAdd implements Strategy{

    public int doOperation(int num1, int num2) {
        return num1 + num2;
    }

}


/**
 * 2. 創建實現接口的實體類。
 * @author mazaiting
 */
public class OperationSub implements Strategy{

    public int doOperation(int num1, int num2) {
        return num1 - num2;
    }

}

/**
 * 2. 創建實現接口的實體類。
 * @author mazaiting
 */
public class OperationMult implements Strategy{

    public int doOperation(int num1, int num2) {
        return num1 * num2;
    }

}
  1. 創建Context類。
/**
 * 3. 創建 Context 類。
 * @author mazaiting
 */
public class Context {
    private Strategy strategy;
    
    public Context(Strategy strategy) {
        this.strategy = strategy;
    }
    
    public int executeStrategy(int num1, int num2) {
        return strategy.doOperation(num1, num2);
    }   
}
  1. 使用 Context 來查看當它改變策略 Strategy 時的行為變化。
/**
 * 4. 使用 Context 來查看當它改變策略 Strategy 時的行為變化。
 * @author mazaiting
 */
public class Client {

    public static void main(String[] args) {
        Context context = new Context(new OperationAdd());
        System.out.println("10 + 5 = " + context.executeStrategy(10, 5));

        context = new Context(new OperationSub());
        System.out.println("10 - 5 = " + context.executeStrategy(10, 5));

        context = new Context(new OperationMult());
        System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
    }
}
  1. 打印結果
10 + 5 = 15
10 - 5 = 5
10 * 5 = 50
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 1 場景問題# 1.1 報價管理## 向客戶報價,對于銷售部門的人來講,這是一個非常重大、非常復雜的問題,對不同的...
    七寸知架構閱讀 5,121評論 9 62
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,837評論 18 139
  • 設計模式匯總 一、基礎知識 1. 設計模式概述 定義:設計模式(Design Pattern)是一套被反復使用、多...
    MinoyJet閱讀 3,961評論 1 15
  • 1 場景問題 1.1 報價管理 向客戶報價,對于銷售部門的人來講,這是一個非常重大、非常復雜的問題,對不同的客戶要...
    4e70992f13e7閱讀 3,107評論 2 16
  • 本文僅僅為入門,高手勿噴。 實際工作中,我們總會遇到類似如下的需求:某支付系統接入以下幾種商戶進行充值:易寶網易,...
    JarvanMo閱讀 14,254評論 14 26