摘要:一個基于策略模式的程序至少由兩部分組成。優點策略模式利用組合委托和多態等技術和思想,可以有效地避免多重條件選擇語句。在策略模式中利用組合和委托來讓擁有執行算法的能力,這也是繼承的一種更輕便的替代方案。
一個基于策略模式的程序至少由兩部分組成。
第一個部分是一組策略類,策略類封裝了具體的算法,并負責具體的計算過程。第二個部分是環境類Context,Context接受客戶的請求,隨后把請求委托給某一個策略類。
優點:
策略模式利用組合、委托和多態等技術和思想,可以有效地避免多重條件選擇語句。
策略模式提供了對開放—封閉原則的完美支持,將算法封裝在獨立的strategy中,使得它們易于切換,易于理解,易于擴展。
策略模式中的算法也可以復用在系統的其他地方,從而避免許多重復的復制粘貼工作。
在策略模式中利用組合和委托來讓Context擁有執行算法的能力,這也是繼承的一種更輕便的替代方案。
缺點:
首先,使用策略模式會在程序中增加許多策略類或者策略對象,但實際上這比把它們負責的邏輯堆砌在Context中要好。
其次,要使用策略模式,必須了解所有的strategy,必須了解各個strategy之間的不同點,這樣才能選擇一個合適的strategy。比如,我們要選擇一種合適的旅游出行路線,必須先了解選擇飛機、火車、自行車等方案的細節。此時strategy要向客戶暴露它的所有實現,這是違反最少知識原則的。
策略模塊:(環境類)
define(function () { "use strict"; var Validator = function () { }; Validator.prototype.selectValidator = function (validator) { this.validator = validator;//validator就是驗證函數 return this; //this指向validator對象 }; Validator.prototype.validate = function (value) { if (this.validator) { return this.validator.validate(value);//this.validator驗證函數 } throw ("No validator selected"); }; return Validator; });
郵箱驗證模塊(策略類)
define(function () { "use strict"; return { validate: function (value) { return value.indexOf("@") !== -1;//簡單的郵箱驗證 } }; });
號碼驗證模塊(策略類)
define(function () { "use strict"; return { validate: function (value) { return (/^[0-9]{11}$/g).test(value);//可以嚴謹些 } } });
init模塊
define(function (require) { "use strict"; return { init: function () { var Strategy = require("strategy/strategy"), telValidator = require("strategy/telValidator"), emailValidator = require("strategy/emailValidator"), validator; validator = new Strategy(); console.log(validator.selectValidator(telValidator).validate(012345678901)); console.log(validator.selectValidator(emailValidator).validate("test")); } }; });
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/78815.html
摘要:實際上在這種將函數作為一等對象的語言里,策略模式已經融入到了語言本身當中,我們經常使用高階函數來封裝不同的行為,并且把它傳遞到另一個函數中。 聲明:這個系列為閱讀《JavaScript設計模式與開發實踐》 ----曾探@著一書的讀書筆記 1.策略模式的定義 將不變的部分和變化的部分隔開是每個設計模式的主題。 定義一系列的算法,把它們一個個封裝起來,并且使它們可以相互替換。 2.策略模式...
摘要:策略模式實現的也是類似的場景。第二個部分是環境類不變,接收客戶的請求,隨后把請求委托給某一個策略類。參考文章設計模式設計模式與開發實踐設計模式系統講解與應用本文首發,期待作者以樂之名本文原創,有不當的地方歡迎指出。 showImg(https://segmentfault.com/img/bVbugi7?w=800&h=600); 策略模式:定義一系列的算法,把它們一個個封裝起來,并且...
摘要:本系列為設計模式與開發實踐作者曾探學習總結,如想深入了解,請支持作者原版策略模式策略模式的定義定義一系列的算法,把它們一個個封裝起來,并且使它們可以互相替換。 本系列為《JavaScript設計模式與開發實踐》(作者:曾探)學習總結,如想深入了解,請支持作者原版 策略模式 策略模式的定義:定義一系列的算法,把它們一個個封裝起來,并且使它們可以互相替換。 舉個形象的例子,使用策略模式計算...
摘要:策略模式可以避免代碼中的多重判斷條件。策略模式在程序中或多或少的增加了策略類。此文僅記錄本人閱讀設計模式與開發實踐這個本時的感受,感謝作者曾探寫出這么好的一本書。設計模式中很重要的一點就是將不變和變分離出來。參考設計模式與開發實踐曾探 策略模式的定義是:定義一系列的算法,把它們一個個封裝起來,并且是它們可以相互替換。 策略模式可以避免代碼中的多重判斷條件。 策略模式很好的體現了開放-...
摘要:策略模式總結什么是策略模式策略模式的定義是定義一系列的算法,把他們獨立封裝起來,并且可以相互替換。策略模式的使用如果策略模式僅僅是用來封裝算法,可能有點小才大用了。原文鏈接設計模式策略模式上一篇設計模式單例模式 javascript策略模式總結 1.什么是策略模式? 策略模式的定義是:定義一系列的算法,把他們獨立封裝起來,并且可以相互替換。 例如我們需要寫一段代碼來計算員工的獎金。當績...
摘要:策略模式總結什么是策略模式策略模式的定義是定義一系列的算法,把他們獨立封裝起來,并且可以相互替換。策略模式的使用如果策略模式僅僅是用來封裝算法,可能有點小才大用了。原文鏈接設計模式策略模式上一篇設計模式單例模式 javascript策略模式總結 1.什么是策略模式? 策略模式的定義是:定義一系列的算法,把他們獨立封裝起來,并且可以相互替換。 例如我們需要寫一段代碼來計算員工的獎金。當績...
閱讀 2913·2023-04-26 02:14
閱讀 3767·2019-08-30 15:55
閱讀 1849·2019-08-29 16:42
閱讀 2764·2019-08-26 11:55
閱讀 2852·2019-08-23 13:38
閱讀 493·2019-08-23 12:10
閱讀 1318·2019-08-23 11:44
閱讀 2814·2019-08-23 11:43