策略模式是行爲型設計模式。算法
其用意是針對一組算法,將每個算法封裝到具備共同接口的獨立的類中,從而使得它們能夠相互替換。設計模式
策略模式使得算法能夠在不影響到客戶端的狀況下發生變化。併發
下面是基本結構:框架
三類角色:分佈式
Strategy
的引用。案例實現: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
免費Java高級資料須要本身領取,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高併發分佈式等教程,一共30G。
傳送門: https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q