日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JavaScript設計模式之策略模式實現原理詳解

瀏覽:281日期:2023-10-24 18:23:25

俗話說,條條大路通羅馬。在現實生活中,我們可以采用很多方法實現同一個目標。比如我們先定個小目標,先掙它一個億。我們可以根據具體的實際情況來完成這個目標。

策略模式的定義

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

舉個例子:表單校驗

在一個Web項目中,注冊、登錄等功能的實現都離不開表單提交。表單校驗也是前端常常需要做的事。假設我們正在編寫一個注冊的頁面,在點擊提交按鈕之前,有如下幾條校驗邏輯:

用戶名不可為空,不允許以空白字符命名,用戶名長度不能小于2位。 密碼長度不能小于6位。 正確的手機號碼格式。

也許,一開始我們會這么寫:

<html><head> <title>策略模式-校驗表單</title> <meta content='text/html; charset=utf-8' http-equiv='Content-Type'></head><body> <form method='post' action='http://xxxx.com/api/register'> 用戶名:<input type='text' name='userName'> 密碼:<input type='text' name='password'> 手機號碼:<input type='text' name='phoneNumber'> <button type='submit'>提交</button> </form> <script type='text/javascript'> var registerForm = document.getElementById(’registerForm’); registerForm.onsubmit = function() { if (registerForm.userName.value === ’’) {alert(’用戶名不可為空’);return false; } if (registerForm.userName.value === ’’) {alert(’用戶名不可為空’);return false; } if (registerForm.userName.value.trim() === ’’) {alert(’用戶名不允許以空白字符命名’);return false; } if (registerForm.userName.value.trim().length < 2) {alert(’用戶名用戶名長度不能小于2位’);return false; } if (registerForm.password.value.trim().length < 6) {alert(’密碼長度不能小于6位’);return false; } if (!/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|17[7]|18[0|1|2|3|5|6|7|8|9])d{8}$/.test(registerForm.phoneNumber.value)) {alert(’請輸入正確的手機號碼格式’);return errorMsg; } } </script></body></html>

這是一種很常見的編碼方式,但它有很明顯的缺點:

registerForm.onsubmit 函數比較龐大,包含了很多if語句,這些語句要覆蓋所有的校驗規則。 若校驗規則有變,不得不深入到registerForm.onsubmit 函數的內部實現,違反開放-封閉原則。 算法的復用性差。

下面,讓我們來用策略模式重構表單校驗

策略模式:表單校驗

<html><head> <title>策略模式-校驗表單</title> <meta content='text/html; charset=utf-8' http-equiv='Content-Type'></head><body> <form method='post' action='http://xxxx.com/api/register'> 用戶名:<input type='text' name='userName'> 密碼:<input type='text' name='password'> 手機號碼:<input type='text' name='phoneNumber'> <button type='submit'>提交</button> </form> <script type='text/javascript'> // 策略對象 var strategies = { isNoEmpty: function (value, errorMsg) {if (value === ’’) { return errorMsg;} }, isNoSpace: function (value, errorMsg) {if (value.trim() === ’’) { return errorMsg;} }, minLength: function (value, length, errorMsg) {if (value.trim().length < length) { return errorMsg;} }, maxLength: function (value, length, errorMsg) {if (value.length > length) { return errorMsg;} }, isMobile: function (value, errorMsg) {if (!/^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|17[7]|18[0|1|2|3|5|6|7|8|9])d{8}$/.test(value)) { return errorMsg;} } } // 驗證類 var Validator = function() { this.cache = []; } Validator.prototype.add = function(dom, rules) { var self = this; for(var i = 0, rule; rule = rules[i++];) {(function(rule) { var strategyAry = rule.strategy.split(’:’); var errorMsg = rule.errorMsg; self.cache.push(function() { var strategy = strategyAry.shift(); strategyAry.unshift(dom.value); strategyAry.push(errorMsg); return strategies[strategy].apply(dom, strategyAry); })})(rule) } }; Validator.prototype.start = function() { for(var i = 0, validatorFunc; validatorFunc = this.cache[i++];) {var errorMsg = validatorFunc();if (errorMsg) { return errorMsg;} } }; // 調用代碼 var registerForm = document.getElementById(’registerForm’); var validataFunc = function() { var validator = new Validator(); validator.add(registerForm.userName, [{strategy: ’isNoEmpty’,errorMsg: ’用戶名不可為空’ }, {strategy: ’isNoSpace’,errorMsg: ’不允許以空白字符命名’ }, {strategy: ’minLength:2’,errorMsg: ’用戶名長度不能小于2位’ }]); validator.add(registerForm.password, [ {strategy: ’minLength:6’,errorMsg: ’密碼長度不能小于6位’ }]); validator.add(registerForm.phoneNumber, [{strategy: ’isMobile’,errorMsg: ’請輸入正確的手機號碼格式’ }]); var errorMsg = validator.start(); return errorMsg; } registerForm.onsubmit = function() { var errorMsg = validataFunc(); if (errorMsg) {alert(errorMsg);return false; } } </script></body></html>

策略模式優缺點

策略模式是一種常用且有效的設計模式。

策略模式可以有效避免多重條件選擇語句。 策略模式提供了對開放-封裝原則的完美支持,將方法封裝在獨立的strategy中,使得它們易于切換,易于理解,易于擴展。 復用性高。

當然,策略模式也有一些缺點

增加了許多策略類或者策略對象。 要使用策略模式,必須了解所有的strategy,違反了最少知識原則。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
97精品国产| 久久国产中文字幕| 成人在线超碰| 国产一区导航| 深夜福利视频一区二区| 日本欧美大码aⅴ在线播放| 欧美一区二区三区激情视频 | 蜜桃一区二区三区在线观看| 日韩深夜视频| 国产欧美日韩一区二区三区在线| 激情黄产视频在线免费观看| 国产精品一区二区免费福利视频| 国产精品三上| 亚洲一级二级| 99精品电影| 日韩在线不卡| 午夜精品久久久久久久久久蜜桃| 国产伦精品一区二区三区在线播放| 国产aⅴ精品一区二区四区| 91精品国产自产精品男人的天堂| 中文不卡在线| 三级亚洲高清视频| 精品国产午夜| 国产综合亚洲精品一区二| 国产精品xvideos88| 欧美激情福利| 99久久精品费精品国产| 国产精品一级| 肉色欧美久久久久久久免费看| 黄色免费成人| 国产精品激情电影| 午夜国产欧美理论在线播放| 香蕉久久久久久久av网站| 成人精品久久| 欧美粗暴jizz性欧美20| 免费精品国产的网站免费观看| 99热精品久久| 亚洲在线久久| 欧美一区激情| 国产高潮在线| 日韩欧美视频专区| 午夜亚洲福利| 久久国际精品| 五月激情久久| 亚洲精品在线二区| 精品国产欧美日韩| 欧美一区=区| 久久亚洲精品中文字幕| 亚洲一级二级| 久久国内精品自在自线400部| 国产一区二区三区四区五区传媒| 伊人精品一区| 国产另类在线| 狠狠久久婷婷| 鲁大师精品99久久久| 国产成人精品福利| 日韩在线一二三区| 日本久久精品| 欧美日本三区| 国产精品美女| 免费观看亚洲| 国产精品天天看天天狠| 美女精品在线观看| 丝袜av一区| а√天堂8资源在线| 久久精品凹凸全集| 亚洲尤物在线| 欧美肉体xxxx裸体137大胆| 另类综合日韩欧美亚洲| 久久亚洲二区| 一区二区亚洲精品| 在线综合亚洲| 亚洲精品欧美| 国产精品自拍区| 精品一区二区三区四区五区| 国产精品一区二区美女视频免费看 | 国产精品普通话对白| 在线观看一区| 国产图片一区| 欧美www视频在线观看| 精品中文一区| 日韩不卡一二三区| 国产精品免费大片| 不卡福利视频| 日韩中文字幕麻豆| 免费在线播放第一区高清av| 日本在线啊啊| 在线精品一区| 国产不卡一区| 一区二区三区网站| 久久久久免费| 亚洲综合婷婷| 亚洲女同av| 亚洲精品美女| 偷拍精品精品一区二区三区| 中文字幕亚洲在线观看| 中文在线免费视频| 欧美.日韩.国产.一区.二区| 91亚洲精品视频在线观看| 不卡福利视频| 国产精品极品在线观看| 午夜久久tv| 狠狠躁少妇一区二区三区| 免费在线观看一区二区三区| 国产一区国产二区国产三区| 视频一区免费在线观看| yellow在线观看网址| 日韩中文字幕一区二区高清99| 欧美好骚综合网| 日本不卡视频在线| 99久久亚洲精品| 亚洲大全视频| 不卡在线一区二区| 99在线|亚洲一区二区| 精品高清久久| 日本欧美一区二区| 久久av在线| 性欧美xxxx免费岛国不卡电影| 精品中国亚洲| 蜜桃精品视频| 久久影视三级福利片| 国产精品亚洲综合在线观看| 亚洲精品无播放器在线播放| 一本一道久久a久久| 亚洲深爱激情| 久久国产精品久久w女人spa| 欧美日韩第一| 国产91一区| 国产一区视频在线观看免费| 91精品在线观看国产| 久久人人99| 99视频精品| 日韩精品一页| 国产精品天堂蜜av在线播放| 国产 日韩 欧美一区| 免费视频国产一区| 欧美日韩视频一区二区三区| 亚洲午夜国产成人| 免费视频最近日韩| 综合色一区二区| 国产美女久久| 久久久久免费| 日本欧美国产| 麻豆国产精品一区二区三区| 国产精品久久久久久久久久久久久久久 | 国产精品高清一区二区| 久久精品国产在热久久| 中文字幕色婷婷在线视频| 亚洲成人一区在线观看| 欧美成人高清| 91精品尤物| 亚洲成人不卡| 中文av在线全新| 国产伦精品一区二区三区视频| 欧美日韩四区| 日韩精品视频网站| 今天的高清视频免费播放成人| 欧美freesex黑人又粗又大| 亚洲精品电影| 精品视频在线观看网站| 午夜精品一区二区三区国产| 日韩精品一区二区三区中文在线| 国产乱人伦精品一区| 欧美日韩国产在线观看网站| 欧美国产另类| 成人黄色av| 夜鲁夜鲁夜鲁视频在线播放| 天海翼精品一区二区三区| 精品一区二区三区四区五区| 久久福利精品| 成人一二三区| 国产亚洲高清一区| 视频在线观看91| 在线手机中文字幕| 国产精品亚洲四区在线观看| 国产91在线精品| 日韩影院精彩在线| 蜜桃成人精品| 久久一区精品| 久久国产高清| 久久久久中文| 精品国产欧美日韩| 日韩福利视频一区| 中文在线日韩| 水野朝阳av一区二区三区| 欧美福利在线| 久久蜜桃av| 精品一区毛片| 好看的亚洲午夜视频在线| 激情久久婷婷| 一区免费视频| 日韩影院精彩在线| 亚洲人成网77777色在线播放| 亚洲尤物在线| 欧美日韩国产免费观看视频| 91看片一区| 久久精品亚洲人成影院 | 不卡中文一二三区| 欧美日韩四区| 在线精品福利|