策略模式的定義:定義一系列的演算法,然後根據實際情況去呼叫
乙個小插曲:最近在專案的過程中接手了乙個比較複雜的需求,由於是舊的專案用新的框架重構,所以能夠看見以前的**,吸取下前人**的精華,復用一些可用的**,免得自己寫半天。。當然這篇的主題是策略模式,不會離題,因為當我完成了version 1 後,專案裡面大量的if-else 欄位的驗證都放在乙個函式裡面,而且不同字段有些還會相互影響,導致**很長很亂大概有幾十行的if else ,絲毫沒有條理;這個時候,需要去重構這個原本的底層驗證函式,那麼就用上了策略模式
給個策略模式放光彩的場景:驗證一行資料的每乙個欄位的正確性,每一行的資料字段假設有6個,驗證這6個字段的正確性,返回結果
然後:假設6個字段分別是a b c d e f;
如果不用策略模式,**如下:
function check(data)if(data.a==???)else
if(data.b==???)else
if(data.c==???)else
. ..}
這是糟糕的方式,那麼進入策略模式的解決方案:
首先,策略模式意味著你要有策略,什麼是策略?就是每一種情況對應的解決方案 ;
將函式內部的每個欄位的方法抽離出來,這些乙個個的判斷方法就是策略!
策略模式還有乙個條件是什麼?需要用到策略的地方能夠訪問到你的策略,抽離成函式的表現就是呼叫其他函式
如何組織策略?抽離成乙個乙個的函式,然後呼叫,返回結果,但是這樣子函式又顯得非常的多,難以維護,js物件字面量提供了非常優雅的解決方案
var mystrategy=,b:function(value),
c:function(value),
d:function(value),
e:function(value),
f:function(value)
}
這樣子,就建立了乙個策略物件,你可以通過新建乙個js檔案,儲存頁面所需要的各種策略,和底層的驗證函式,需要用到的地方再去引用這個js檔案這樣應該是比較好的方式
那麼如何使用策略?
function checke(data);for(var key in data)
return result;
}
超級6的有沒有,解釋下上面的行為
1,獲得策略物件
2,遍歷資料物件,拿到每一次的key,也就是abcdef這些,
3,然後去策略裡面找對應的策略方法,執行拿到返回結果
4,將結果賦給本地的result物件,裡面的key,abcdef,儲存著對應的字段錯誤資訊,返回這個result物件
理解js設計模式之策略模式
策略模式的定義 定義一系列的演算法,然後根據實際情況去呼叫 乙個小插曲 最近在專案的過程中接手了乙個比較複雜的需求,由於是舊的專案用新的框架重構,所以能夠看見以前的 吸取下前人 的精華,復用一些可用的 免得自己寫半天。當然這篇的主題是策略模式,不會離題,因為當我完成了version 1 後,專案裡面...
JS 設計模式 策略模式
策略模式指的是定義一系列的演算法,把它們乙個個封裝起來。將不變的部分和變化的部分隔開是每個設計模式的主題,策略模式也不例外,策略模式的目的就是將演算法的使用與演算法的實現分離開來。可以很好的替換if else混亂的 var strategies a function salary b functio...
JS設計模式 策略模式
乙個根據等級計算獎金的例子。var stratagies a function salary b function salary var calculatebonus function level,salary console.log calculatebonus s 20000 console.l...