摘要:什么是策略模式策略模式,就是將不同的算法各自封裝起來,然后根據(jù)程序的不同情況,采用不同的算法,有點像工廠模式。在其他語言中,實現(xiàn)這樣的思路也比較費勁,而得函數(shù)非常靈活,本來可以當(dāng)值傳遞,所以實現(xiàn)策略模式非常輕松,也很靈活。
什么是策略模式
策略模式,就是將不同的算法各自封裝起來,然后根據(jù)程序的不同情況,采用不同的算法,有點像工廠模式。比如在很多種情況下,都要寫ifXXX dosometing() else if XXX,這是最基本的程序邏輯寫法,但隨著情況越來越復(fù)雜,那么代碼將非常難讀,混亂不堪。
策略模式實現(xiàn)之前寫過的一個頁面就非常痛苦,是一個訂單頁加一些新功能,我是中途接手的,這個頁面大概的描述是根據(jù)不同的角色(用戶,商家,管理員)和不同的訂單狀態(tài)對頁面進行相應(yīng)的DOM操作和提供不同的接口功能。之前情況不多,代碼也就是最簡單的if else,雖然丑陋了點,但也沒到不可讀的地步,但隨著訂單不同的status增加到十幾種,和夾雜一些訂單不同狀態(tài)轉(zhuǎn)換前的判斷,代碼就看起來不可控了。
我嘗試用策略模式重構(gòu)代碼,先簡化一下,看看一種狀態(tài)下不同角色操作實現(xiàn):
if(role == 1){ $(".order_btn").text("查看訂單"); checkOrder(); }else if(role == 2){ $(".order_btn").text("發(fā)貨"); deilverGoods(); }else if(role == 3){ $(".order_btn").text("取消訂單"); cancelOrder(); }
1代表用戶,2代表商家,3代表管理員,隨著角色不同,相應(yīng)頁面按鈕進行不同處理,也相應(yīng)調(diào)用不同的實現(xiàn)算法。
先嘗試將角色與操作對應(yīng)封裝:
var performanceByRole={ user:function(){ $(".order_btn").text("查看訂單"); checkOrder(); }, seller:function(){ $(".order_btn").text("發(fā)貨"); deilverGoods(); }, manage:function(){ $(".order_btn").text("取消訂單"); cancelOrder(); } }; function shiftRole(role){ if(role == 1){ return "user"; }else if(role == 2){ return "seller" }else if(role == 3){ return "manage" }; } function toDiffStrategy(role){ var funcname = shiftRole(role); performanceByRole[funcname](); } var role = fromServer(); toDiffStrategy(role);
首先把要采取的不同策略封裝在一個鍵值對里,shiftRole這個函數(shù)是“多余的”,轉(zhuǎn)換一下后臺傳給前端的數(shù)據(jù),這里即使用了if else也是可控的,因為角色就那么幾個,之后toDiffStrategy將根據(jù)傳入的不同角色,采取不同的策略算法。在其他語言中,實現(xiàn)這樣的思路也比較費勁,而js得函數(shù)非常靈活,本來可以當(dāng)值傳遞,所以實現(xiàn)策略模式非常輕松,也很靈活。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/87796.html
摘要:策略模式策略模式指的是定義一系列的算法,把它們一個個封裝起來,將不變的部分和變化的部分隔開,實際就是將算法的使用和實現(xiàn)分離出來這樣就能避免很多的條件判斷并且增強了代碼的復(fù)用性其中包含一個策略類和一個環(huán)境類計算獎金的例子策略類環(huán)境類設(shè)置原始工 策略模式 策略模式指的是 定義一系列的算法,把它們一個個封裝起來,將不變的部分和變化的部分隔開,實際就是將算法的使用和實現(xiàn)分離出來, 這樣就能避...
摘要:策略模式可以避免代碼中的多重判斷條件。策略模式在程序中或多或少的增加了策略類。此文僅記錄本人閱讀設(shè)計模式與開發(fā)實踐這個本時的感受,感謝作者曾探寫出這么好的一本書。設(shè)計模式中很重要的一點就是將不變和變分離出來。參考設(shè)計模式與開發(fā)實踐曾探 策略模式的定義是:定義一系列的算法,把它們一個個封裝起來,并且是它們可以相互替換。 策略模式可以避免代碼中的多重判斷條件。 策略模式很好的體現(xiàn)了開放-...
摘要:本系列為設(shè)計模式與開發(fā)實踐作者曾探學(xué)習(xí)總結(jié),如想深入了解,請支持作者原版策略模式策略模式的定義定義一系列的算法,把它們一個個封裝起來,并且使它們可以互相替換。 本系列為《JavaScript設(shè)計模式與開發(fā)實踐》(作者:曾探)學(xué)習(xí)總結(jié),如想深入了解,請支持作者原版 策略模式 策略模式的定義:定義一系列的算法,把它們一個個封裝起來,并且使它們可以互相替換。 舉個形象的例子,使用策略模式計算...
摘要:策略模式又稱政策模式,其定義一系列的算法,把它們一個個封裝起來,并且使它們可以互相替換。的表單具有表單驗證功能,用來校驗用戶輸入的表單內(nèi)容。實際需求中表單驗證項一般會比較復(fù)雜,所以需要給每個表單項增加自定義校驗方法。 showImg(https://segmentfault.com/img/remote/1460000020135990); 策略模式 (Strategy Pattern...
摘要:寫代碼容易,寫出優(yōu)雅的代碼難,寫易于維護的容易擴展的結(jié)構(gòu)清晰的代碼應(yīng)該是每位開發(fā)者努力的目標,而學(xué)習(xí)設(shè)計模式,合理的的使用能讓我們離這個目標更進一步。 寫代碼容易,寫出優(yōu)雅的代碼難,寫易于維護的、容易擴展的、結(jié)構(gòu)清晰的代碼應(yīng)該是每位開發(fā)者努力的目標,而學(xué)習(xí)設(shè)計模式,合理的的使用能讓我們離這個目標更進一步。最近看了《Javascript設(shè)計模式與開發(fā)實踐》這本書,一言以蔽之,真不錯的一本...
閱讀 3456·2021-11-22 12:04
閱讀 2783·2019-08-29 13:49
閱讀 550·2019-08-26 13:45
閱讀 2349·2019-08-26 11:56
閱讀 1102·2019-08-26 11:43
閱讀 659·2019-08-26 10:45
閱讀 1351·2019-08-23 16:48
閱讀 2272·2019-08-23 16:07