原 薦 設計模式 之 策略模式
設計模式 之 策略模式
原
薦
GMarshal 釋出於 今天 15:13字數 713
閱讀 7
收藏 0
開發十年,就只剩下這套Java開發體系了 >>>
設計模式 之 策略模式
定義
提供幾個演算法策略,選擇其中一個策略去執行。
優點
- 由於將演算法封裝成單獨的策略,策略可以靈活切換。
- 擴充套件性好,符合開閉原則。
缺點
- 策略多,類也會變多
- 策略類需要對外暴露
程式碼
場景
常見的加、減、乘、除,客戶端選擇其中一個演算法進行計算。
程式碼
IOperation
/** * 操作介面 * @author GaoYuan * @date 2018/11/11 下午2:45 */ public interface IOperation { /** 執行計算 */ int operation(int a,int b); }
加、減、乘、除具體的演算法實現類
/** * 加法 */ public class AddOperation implements IOperation{ @Override public int operation(int a, int b) { return a + b; } } /** * 減法 */ public class SubOperation implements IOperation{ @Override public int operation(int a, int b) { return a - b; } } /** * 乘法 */ public class MulOperation implements IOperation{ @Override public int operation(int a, int b) { return a * b; } } /** * 除法 */ public class DivOperation implements IOperation{ @Override public int operation(int a, int b){ if(b == 0){ return 0; } return a / b; } }
Context
/** * 使用者 * @author GaoYuan * @date 2018/11/11 下午2:51 */ public class Context { IOperation iOperation; public Context(IOperation iOperation) { this.iOperation = iOperation; } public int execute(int a, int b){ return iOperation.operation(a, b); } }
測試
public static void main(String[] args){ // 加 Context context = new Context(new AddOperation()); System.out.println(context.execute(6,2)); // 減 context = new Context(new SubOperation()); System.out.println(context.execute(6,2)); // 乘 context = new Context(new MulOperation()); System.out.println(context.execute(6,2)); // 除 context = new Context(new DivOperation()); System.out.println(context.execute(6,2)); }
結果輸出:
策略模式 與 狀態模式 區別
相同點
- 類的結構都差不多
不同點
- 狀態模式 側重 狀態之間的切換,在狀態A執行完畢後自己控制狀態指向狀態B,根據狀態改變行為。
- 策略模式 側重 呼叫者選擇其中一種策略進行執行。根據不同的條件選擇不同的策略。
策略模式 與 簡單工廠模式 區別
相同點
- 最終結果是一致的,都是根據某個情景,執行最終的演算法
不同點
概念上,或者說最本質的區別
- 簡單工廠模式屬於建立型模式,呼叫者,根據條件,可以獲取直接建立好的目標物件,然後呼叫該物件對應的方法即可。
- 策略模式屬於行為型模式,呼叫者需要先建立Context物件,然後自行選擇演算法,以便具體呼叫。
當然,在一定程度上,兩者也可以相結合。
碼雲
部落格
https://my.oschina.net/gmarshal/blog/2876104

© 著作權歸作者所有
共有人打賞支援
上一篇: 淺談前後端分離專案結構的探索
下一篇: 設計模式 之 狀態模式
相關文章 最新文章
《PHP設計模式大全》已整理成PDF文件,點選可直接下載至本地查閱 https://www.webfalse.com/read/201739.html 文章 php設計模式介紹之程式設計慣用法第1/3頁 php設計模式介紹之值物件模式第1/5頁...
kaixin_code
11/06
0
0
該文章屬於《程式設計中的那些經典套路——設計模式彙總》系列,並且以下內容基於語言PHP 今天講講策略模式,策略模式 和工廠模式十分相像(或者說在程式碼邏輯層面,他們是一樣的)。 但策略模式與...
gzchen
08/27
0
0
工廠模式介紹 工廠模式是一個建立型的模式,主要就是建立物件。其中工廠模式又分為簡單工廠模式和抽象工廠模式。簡單工廠模式是通過工廠方法確定建立 對應型別的物件。抽象工廠模式是通過子類...
hlxiong
2014/04/14
0
0
JavaScript設計模式入坑 介紹 設計模式編寫易於維護的程式碼。 設計模式的開創者是一位土木工程師。Σ( ° △ °|||)︴,寫程式碼就是蓋房子。 模式 模式一種可以複用的解決方案。解決軟體設計中...
小小小8021
10/18
0
0
一、簡述 代理模式(Proxy Pattern),為其他物件提供一個代理,並由代理物件控制原有物件的引用;也稱為委託模式。 其實代理模式無論是在日常開發還是設計模式中,基本隨處可見,中介者模式中...
MrTrying
06/24
0
0

沒有更多內容
載入失敗,請重新整理頁面
載入更多1.點選虛擬機器: 2.點選安裝Vmware-Tools,出現如下介面,將圈起來的拖動到桌面 3.接著開啟終端,執行解壓縮命令 tar -xzv -f VMwareTools-10.2.5-8068393.tar.gz 這個後面的VMwareTools-10.2....
陳剛生
31分鐘前
1
0
java SE : java standard edition , JSE。它允許允許開發和部署在桌面、伺服器、嵌入式環境和實時環境中使用的java應用程式。 java SE包含了java Web 服務開發的類,併為java platform ,e...
hellation_
34分鐘前
3
0
像人類一樣可以思考,可以創造的人工智慧會出現嗎? 個人認為:會出現。但是出現的時間,取決了於硬體架構,和運算架構實現的時候。原因在於,人類智慧可以出現,機器智慧為什麼不可以呢,不...
janl
39分鐘前
1
0
omi-mp 是什麼 Omi 框架是微信支付線研發部和 AlloyTeam 開源的通用 Web 元件化框架,基於 Web Components,用來開發 PC、手機瀏覽器或者微信、手Q webview 的 Web 頁面。自今年5月開源以來,...
騰訊開源
43分鐘前
1
0

沒有更多內容
載入失敗,請重新整理頁面
載入更多