JavaScript設計模式之策略模式執行個體,javascript設計模式

來源:互聯網
上載者:User

JavaScript設計模式之策略模式執行個體,javascript設計模式

策略模式的意義是定義一系列的演算法,把它們一個個封裝起來,並且使它們可相互替換。
一個小例子就能讓我們一目瞭然。

回憶下jquery裡的animate方法.

複製代碼 代碼如下:
$( div ).animate( {“left: 200px”}, 1000, ‘linear' );  //勻速運動
$( div ).animate( {“left: 200px”}, 1000, ‘cubic' );  //三次方的緩動

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

再來一個例子. 上半年我寫的dev.qplus.com, 很多頁面都會有個即時驗證的表單. 表單的每個成員都會有一些不同的驗證規則.

比如姓名框裡面, 需要驗證非空,敏感詞,字元過長這幾種情況。 當然是可以寫3個if else來解決,不過這樣寫代碼的擴充性和維護性可想而知。如果表單裡面的元素多一點,需要校正的情況多一點,加起來寫上百個if else也不是沒有可能。

所以更好的做法是把每種驗證規則都用策略模式單獨的封裝起來。需要哪種驗證的時候只需要提供這個策略的名字。就像這樣:

複製代碼 代碼如下:
nameInput.addValidata({
notNull: true,
dirtyWords: true,
maxLength: 30
})
而notNull,maxLength等方法只需要統一的返回true或者false,來表示是否通過了驗證。
複製代碼 代碼如下:validataList = {
notNull: function( value ){
return value !== ”;
},
maxLength: function( value, maxLen ){
return value.length() > maxLen;
}
}

可以看到,各種驗證規則很容易被修改和相互替換。如果某天產品經理建議字元過長的限制改成60個字元。那隻需要0.5秒完成這次工作。


什是策略設計模式

策略模式(Strategy Pattern),定義了一系列的演算法,將每一種演算法封裝起來並可以相互替換使用,策略模式讓演算法獨立於使用它的客戶應用而獨立變化。

策略模式是處理演算法的不同變體的一種行為模式,通過在抽象策略中定義演算法介面或封裝演算法標識,實現該抽象策略的具體子類成為一個單獨的演算法,即具體策略。策略模式使用多個類來區別不同的行為,使用原則模式避免暴露複雜的、與演算法相關的內部資料結構。當一個類中的操作以多個條件分支語句的形式出現的時候,可以使用原則模式將相關的條件分支移入各自的具體策略類中以代替這些條件陳述式,從而減少系統處理的複雜度。

推薦你一本設計模式方面的權威書籍:鄭阿奇 主編的《軟體秘笈-設計模式那點事》。裡面講解很到位,執行個體通俗易懂,看了收穫很大!

祝你早日學會設計模式!
 
設計模式在JavaScript的開發中用處大不大?

設計模式是一套被反覆使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。
既然是經驗總結,那肯定是前人工作總結的結晶。放到哪裡都是適用的,不單是java編程,現在C#很多地方都跟進設計模式。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.