結合案例深刻解析策略模式

1、基本概念

策略模式是行爲型設計模式。算法

其用意是針對一組算法,將每個算法封裝到具備共同接口的獨立的類中,從而使得它們能夠相互替換。設計模式

策略模式使得算法能夠在不影響到客戶端的狀況下發生變化。併發

2、結構

下面是基本結構:框架

 

 

三類角色:分佈式

  • 環境(Context)角色:持有一個Strategy的引用。
  • 抽象策略(Strategy)角色:這是一個抽象角色,一般由一個接口或抽象類實現。此角色給出全部的具體策略類所需的接口。
  • 具體策略(ConcreteStrategy)角色:包裝了相關的算法或行爲。

3、案例

案例實現:ide

定義一族算法,能夠實現對兩個數的操做,例如 +、-、*、/等。

實現代碼總體框架圖:高併發

 

 

具體代碼實現:測試

Context類:this

/**
 * Context 是一個使用了某種策略的類。 實現了 Strategy 接口的實體策略類
 */
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);
    }
}
Strategy接口:

/**策略的公共接口*/
public interface Strategy {
    int doOperation(int num1, int num2);
}

 

三種對應的算法實現:spa

/** 算法1: 實現加法 */
public class OperationAdd implements Strategy {
    @Override
    public int doOperation(int num1, int num2) {
        return num1 + num2;
    }
}
/** 算法2:實現減法 */
public class OperationSubstract implements Strategy{
    @Override
    public int doOperation(int num1, int num2) {
        return num1 - num2;
    }
}
/** 算法3: 實現乘法 */
public class OperationMultiply implements Strategy{
    @Override
    public int doOperation(int num1, int num2) {
        return num1 * num2;
    }
}

 

測試類:

public class MyTest {
    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 OperationSubstract());
        System.out.println("10 - 5 = " + context.executeStrategy(10, 5));

        context = new Context(new OperationMultiply());
        System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
    }
}

 

程序輸出:

10 + 5 = 15
10 - 5 = 5
10 * 5 = 50

 

4、總結

  • 策略模式的重心不是如何實現算法,而是如何組織、調用這些算法;
  • 策略模式一個很大的特色就是各個策略算法的平等性。對於一系列具體的策略算法,你們的地位是徹底同樣的,正由於這個平等性,才能實現算法之間能夠相互替換;
  • 使用策略模式能夠避免使用多重條件(if-else)語句;
免費Java高級資料須要本身領取,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高併發分佈式等教程,一共30G。
傳送門:
相關文章
相關標籤/搜索