国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript設計模式之策略模式學習筆記

2024-05-06 15:11:29
字體:
來源:轉載
供稿:網友

1. 理解javascript中的策略模式

策略模式的定義是:定義一系列的算法,把它們一個個封裝起來,并且使它們可以相互替換。

使用策略模式的優點如下:

優點:

      1. 策略模式利用組合,委托等技術和思想,有效的避免很多if條件語句。

      2. 策略模式提供了開放-封閉原則,使代碼更容易理解和擴展。

      3. 策略模式中的代碼可以復用。

一:使用策略模式計算獎金;

下面的demo是我在書上看到的,但是沒有關系,我們只是來理解下策略模式的使用而已,我們可以使用策略模式來計算獎金問題;

比如公司的年終獎是根據員工的工資和績效來考核的,績效為A的人,年終獎為工資的4倍,績效為B的人,年終獎為工資的3倍,績效為C的人,年終獎為工資的2倍;現在我們使用一般的編碼方式會如下這樣編寫代碼:

var calculateBouns = function(salary,level) {  if(level === 'A') {    return salary * 4;  }  if(level === 'B') {    return salary * 3;  }  if(level === 'C') {    return salary * 2;  }};// 調用如下:console.log(calculateBouns(4000,'A')); // 16000console.log(calculateBouns(2500,'B')); // 7500

第一個參數為薪資,第二個參數為等級;

代碼缺點如下:

calculateBouns 函數包含了很多if-else語句。

calculateBouns 函數缺乏彈性,假如還有D等級的話,那么我們需要在calculateBouns 函數內添加判斷等級D的if語句;

算法復用性差,如果在其他的地方也有類似這樣的算法的話,但是規則不一樣,我們這些代碼不能通用。

2. 使用組合函數重構代碼

組合函數是把各種算法封裝到一個個的小函數里面,比如等級A的話,封裝一個小函數,等級為B的話,也封裝一個小函數,以此類推;如下代碼:

var performanceA = function(salary) {  return salary * 4;};var performanceB = function(salary) {  return salary * 3;};    var performanceC = function(salary) {  return salary * 2};var calculateBouns = function(level,salary) {  if(level === 'A') {    return performanceA(salary);  }  if(level === 'B') {    return performanceB(salary);  }  if(level === 'C') {    return performanceC(salary);  }};// 調用如下console.log(calculateBouns('A',4500)); // 18000

代碼看起來有點改善,但是還是有如下缺點:

calculateBouns 函數有可能會越來越大,比如增加D等級的時候,而且缺乏彈性。

3. 使用策略模式重構代碼

策略模式指的是 定義一系列的算法,把它們一個個封裝起來,將不變的部分和變化的部分隔開,實際就是將算法的使用和實現分離出來;算法的使用方式是不變的,都是根據某個算法取得計算后的獎金數,而算法的實現是根據績效對應不同的績效規則;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 永善县| 九寨沟县| 阿拉善左旗| 应用必备| 新竹县| 西峡县| 上思县| 金乡县| 屯留县| 海丰县| 灵武市| 隆昌县| 浮山县| 屏南县| 福海县| 顺平县| 枣强县| 阜康市| 内黄县| 鞍山市| 康乐县| 东阿县| 乌恰县| 无为县| 富宁县| 深州市| 洪雅县| 平昌县| 新营市| 彰化县| 普定县| 苍溪县| 罗平县| 黎川县| 长春市| 龙川县| 海南省| 嘉峪关市| 花莲市| 灵台县| 宁晋县|