成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript設(shè)計(jì)模式學(xué)習(xí)—策略模式

snifes / 1539人閱讀

摘要:什么是策略模式策略模式,就是將不同的算法各自封裝起來,然后根據(jù)程序的不同情況,采用不同的算法,有點(diǎn)像工廠模式。在其他語言中,實(shí)現(xiàn)這樣的思路也比較費(fèi)勁,而得函數(shù)非常靈活,本來可以當(dāng)值傳遞,所以實(shí)現(xiàn)策略模式非常輕松,也很靈活。

什么是策略模式

策略模式,就是將不同的算法各自封裝起來,然后根據(jù)程序的不同情況,采用不同的算法,有點(diǎn)像工廠模式。比如在很多種情況下,都要寫ifXXX dosometing() else if XXX,這是最基本的程序邏輯寫法,但隨著情況越來越復(fù)雜,那么代碼將非常難讀,混亂不堪。

策略模式實(shí)現(xiàn)

之前寫過的一個(gè)頁面就非常痛苦,是一個(gè)訂單頁加一些新功能,我是中途接手的,這個(gè)頁面大概的描述是根據(jù)不同的角色(用戶,商家,管理員)和不同的訂單狀態(tài)對頁面進(jìn)行相應(yīng)的DOM操作和提供不同的接口功能。之前情況不多,代碼也就是最簡單的if else,雖然丑陋了點(diǎn),但也沒到不可讀的地步,但隨著訂單不同的status增加到十幾種,和夾雜一些訂單不同狀態(tài)轉(zhuǎn)換前的判斷,代碼就看起來不可控了。
我嘗試用策略模式重構(gòu)代碼,先簡化一下,看看一種狀態(tài)下不同角色操作實(shí)現(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)頁面按鈕進(jìn)行不同處理,也相應(yīng)調(diào)用不同的實(shí)現(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);

首先把要采取的不同策略封裝在一個(gè)鍵值對里,shiftRole這個(gè)函數(shù)是“多余的”,轉(zhuǎn)換一下后臺(tái)傳給前端的數(shù)據(jù),這里即使用了if else也是可控的,因?yàn)榻巧湍敲磶讉€(gè),之后toDiffStrategy將根據(jù)傳入的不同角色,采取不同的策略算法。在其他語言中,實(shí)現(xiàn)這樣的思路也比較費(fèi)勁,而js得函數(shù)非常靈活,本來可以當(dāng)值傳遞,所以實(shí)現(xiàn)策略模式非常輕松,也很靈活。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/87796.html

相關(guān)文章

  • javascript設(shè)計(jì)模式學(xué)習(xí)筆記之策略模式

    摘要:策略模式策略模式指的是定義一系列的算法,把它們一個(gè)個(gè)封裝起來,將不變的部分和變化的部分隔開,實(shí)際就是將算法的使用和實(shí)現(xiàn)分離出來這樣就能避免很多的條件判斷并且增強(qiáng)了代碼的復(fù)用性其中包含一個(gè)策略類和一個(gè)環(huán)境類計(jì)算獎(jiǎng)金的例子策略類環(huán)境類設(shè)置原始工 策略模式 策略模式指的是 定義一系列的算法,把它們一個(gè)個(gè)封裝起來,將不變的部分和變化的部分隔開,實(shí)際就是將算法的使用和實(shí)現(xiàn)分離出來, 這樣就能避...

    wh469012917 評論0 收藏0
  • JS策略模式JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》閱讀筆記

    摘要:策略模式可以避免代碼中的多重判斷條件。策略模式在程序中或多或少的增加了策略類。此文僅記錄本人閱讀設(shè)計(jì)模式與開發(fā)實(shí)踐這個(gè)本時(shí)的感受,感謝作者曾探寫出這么好的一本書。設(shè)計(jì)模式中很重要的一點(diǎn)就是將不變和變分離出來。參考設(shè)計(jì)模式與開發(fā)實(shí)踐曾探 策略模式的定義是:定義一系列的算法,把它們一個(gè)個(gè)封裝起來,并且是它們可以相互替換。 策略模式可以避免代碼中的多重判斷條件。 策略模式很好的體現(xiàn)了開放-...

    Amos 評論0 收藏0
  • JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐系列之策略模式

    摘要:本系列為設(shè)計(jì)模式與開發(fā)實(shí)踐作者曾探學(xué)習(xí)總結(jié),如想深入了解,請支持作者原版策略模式策略模式的定義定義一系列的算法,把它們一個(gè)個(gè)封裝起來,并且使它們可以互相替換。 本系列為《JavaScript設(shè)計(jì)模式與開發(fā)實(shí)踐》(作者:曾探)學(xué)習(xí)總結(jié),如想深入了解,請支持作者原版 策略模式 策略模式的定義:定義一系列的算法,把它們一個(gè)個(gè)封裝起來,并且使它們可以互相替換。 舉個(gè)形象的例子,使用策略模式計(jì)算...

    spademan 評論0 收藏0
  • JavaScript 設(shè)計(jì)模式系列 - 策略模式與動(dòng)態(tài)表單驗(yàn)證

    摘要:策略模式又稱政策模式,其定義一系列的算法,把它們一個(gè)個(gè)封裝起來,并且使它們可以互相替換。的表單具有表單驗(yàn)證功能,用來校驗(yàn)用戶輸入的表單內(nèi)容。實(shí)際需求中表單驗(yàn)證項(xiàng)一般會(huì)比較復(fù)雜,所以需要給每個(gè)表單項(xiàng)增加自定義校驗(yàn)方法。 showImg(https://segmentfault.com/img/remote/1460000020135990); 策略模式 (Strategy Pattern...

    宋華 評論0 收藏0
  • 學(xué)習(xí)這些設(shè)計(jì)模式,讓你寫出更優(yōu)雅的代碼

    摘要:寫代碼容易,寫出優(yōu)雅的代碼難,寫易于維護(hù)的容易擴(kuò)展的結(jié)構(gòu)清晰的代碼應(yīng)該是每位開發(fā)者努力的目標(biāo),而學(xué)習(xí)設(shè)計(jì)模式,合理的的使用能讓我們離這個(gè)目標(biāo)更進(jìn)一步。 寫代碼容易,寫出優(yōu)雅的代碼難,寫易于維護(hù)的、容易擴(kuò)展的、結(jié)構(gòu)清晰的代碼應(yīng)該是每位開發(fā)者努力的目標(biāo),而學(xué)習(xí)設(shè)計(jì)模式,合理的的使用能讓我們離這個(gè)目標(biāo)更進(jìn)一步。最近看了《Javascript設(shè)計(jì)模式與開發(fā)實(shí)踐》這本書,一言以蔽之,真不錯(cuò)的一本...

    songjz 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<