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

首頁(yè) > 語(yǔ)言 > JavaScript > 正文

JavaScript設(shè)計(jì)模式之策略模式實(shí)例

2024-05-06 16:09:28
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了JavaScript設(shè)計(jì)模式之策略模式實(shí)例,本文分析了Jquery源碼并給出了自己的實(shí)現(xiàn),需要的朋友可以參考下
 
 

策略模式的意義是定義一系列的算法,把它們一個(gè)個(gè)封裝起來(lái),并且使它們可相互替換。
一個(gè)小例子就能讓我們一目了然。

回憶下jquery里的animate方法.

 

復(fù)制代碼代碼如下:

$( div ).animate( {“left: 200px”}, 1000, ‘linear' );  //勻速運(yùn)動(dòng)
$( div ).animate( {“left: 200px”}, 1000, ‘cubic' );  //三次方的緩動(dòng)

 

這2句代碼都是讓div在1000ms內(nèi)往右移動(dòng)200個(gè)像素. linear(勻速)和cubic(三次方緩動(dòng))就是一種策略模式的封裝.

再來(lái)一個(gè)例子. 上半年我寫(xiě)的dev.qplus.com, 很多頁(yè)面都會(huì)有個(gè)即時(shí)驗(yàn)證的表單. 表單的每個(gè)成員都會(huì)有一些不同的驗(yàn)證規(guī)則.

比如姓名框里面, 需要驗(yàn)證非空,敏感詞,字符過(guò)長(zhǎng)這幾種情況。 當(dāng)然是可以寫(xiě)3個(gè)if else來(lái)解決,不過(guò)這樣寫(xiě)代碼的擴(kuò)展性和維護(hù)性可想而知。如果表單里面的元素多一點(diǎn),需要校驗(yàn)的情況多一點(diǎn),加起來(lái)寫(xiě)上百個(gè)if else也不是沒(méi)有可能。

所以更好的做法是把每種驗(yàn)證規(guī)則都用策略模式單獨(dú)的封裝起來(lái)。需要哪種驗(yàn)證的時(shí)候只需要提供這個(gè)策略的名字。就像這樣:

 

復(fù)制代碼代碼如下:

nameInput.addValidata({
notNull: true,
dirtyWords: true,
maxLength: 30
})

而notNull,maxLength等方法只需要統(tǒng)一的返回true或者false,來(lái)表示是否通過(guò)了驗(yàn)證。
復(fù)制代碼代碼如下:
validataList = {
notNull: function( value ){
return value !== ”;
},
maxLength: function( value, maxLen ){
return value.length() > maxLen;
}
}

 

可以看到,各種驗(yàn)證規(guī)則很容易被修改和相互替換。如果某天產(chǎn)品經(jīng)理建議字符過(guò)長(zhǎng)的限制改成60個(gè)字符。那只需要0.5秒完成這次工作。


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 仁化县| 金华市| 南平市| 扎鲁特旗| 浮梁县| 襄垣县| 文安县| 晋中市| 平舆县| 南京市| 湖州市| 福安市| 宁武县| 沧州市| 修武县| 龙南县| 凤城市| 江源县| 南昌市| 房产| 灯塔市| 靖边县| 呼图壁县| 铁力市| 浦县| 宁南县| 辽中县| 乌兰县| 慈利县| 英德市| 林口县| 泸州市| 论坛| 卢龙县| 安乡县| 武强县| 遂溪县| 江华| 札达县| 宜州市| 南平市|