结合案例深入解析策略模式
生活随笔
收集整理的這篇文章主要介紹了
结合案例深入解析策略模式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、基本概念
策略模式是行為型設計模式。
其用意是針對一組算法,將每一個算法封裝到具有共同接口的獨立的類中,從而使得它們可以相互替換。
策略模式使得算法可以在不影響到客戶端的情況下發生變化。
二、結構
下面是基本結構:
?
?
三類角色:
- 環境(Context)角色:持有一個Strategy的引用。
- 抽象策略(Strategy)角色:這是一個抽象角色,通常由一個接口或抽象類實現。此角色給出所有的具體策略類所需的接口。
- 具體策略(ConcreteStrategy)角色:包裝了相關的算法或行為。
三、案例
案例實現:
定義一族算法,可以實現對兩個數的操作,例如+、-、*、/等。實現代碼整體框架圖:
?
?
具體代碼實現:
Context類:
/*** 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); }?
三種對應的算法實現:
/** 算法1: 實現加法 */ public class OperationAdd implements Strategy {@Overridepublic int doOperation(int num1, int num2) {return num1 + num2;} } /** 算法2:實現減法 */ public class OperationSubstract implements Strategy{@Overridepublic int doOperation(int num1, int num2) {return num1 - num2;} } /** 算法3: 實現乘法 */ public class OperationMultiply implements Strategy{@Overridepublic 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?
四、總結
- 策略模式的重心不是如何實現算法,而是如何組織、調用這些算法;
- 策略模式一個很大的特點就是各個策略算法的平等性。對于一系列具體的策略算法,大家的地位是完全一樣的,正因為這個平等性,才能實現算法之間可以相互替換;
- 使用策略模式可以避免使用多重條件(if-else)語句;
傳送門:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q
轉載于:https://www.cnblogs.com/yuxiang1/p/11016999.html
總結
以上是生活随笔為你收集整理的结合案例深入解析策略模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue切换路由时动画
- 下一篇: Servlet的部分request请求处