1、基本概念
策略模式是行爲型設計模式。算法
其用意是針對一組算法,將每個算法封裝到具備共同接口的獨立的類中,從而使得它們能夠相互替換。設計模式
策略模式使得算法能夠在不影響到客戶端的狀況下發生變化。併發
2、結構
下面是基本結構:框架
三類角色:分佈式
環境(Context)角色:持有一個Strategy的引用。
抽象策略(Strategy)角色:這是一個抽象角色,一般由一個接口或抽象類實現。此角色給出全部的具體策略類所需的接口。
具體策略(ConcreteStrategy)角色:包裝了相關的算法或行爲。
3、案例
案例實現:ide
定義一族算法,能夠實現對兩個數的操做,例如+、-、*、/等。
實現代碼總體框架圖:高併發
具體代碼實現:測試
Context類:this
/**spa
*/
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);
}
三種對應的算法實現:
/* 算法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。
傳送門:https://mp.weixin.qq.com/s/Jz...