久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

javascript設(shè)計(jì)模式 ? 解釋器模式原理與用法實(shí)例分析

瀏覽:5日期:2023-11-03 14:22:05

本文實(shí)例講述了javascript設(shè)計(jì)模式 ? 解釋器模式原理與用法。分享給大家供大家參考,具體如下:

介紹:之前在做java開(kāi)發(fā)時(shí),數(shù)據(jù)庫(kù)的增刪改查特別頻繁,并且場(chǎng)景不同需要用到的SQL語(yǔ)句頁(yè)都不同,如何用調(diào)用方法的形式來(lái)使用sql語(yǔ)句,拼接sql?這就是這一節(jié)我們要講的解釋器模式。

定義:定義一個(gè)語(yǔ)言的文法,并且建立一個(gè)解釋器來(lái)解釋該語(yǔ)言中的句子,這里的語(yǔ)言是指使用規(guī)定格式和語(yǔ)法的代碼。解釋器模式是一種類行為型模式。

場(chǎng)景:我們實(shí)現(xiàn)一個(gè)解釋器,用來(lái)判斷傳遞的數(shù)字是奇數(shù)還是偶數(shù),是正數(shù)還是負(fù)數(shù),是正奇數(shù)還是負(fù)奇數(shù)。

示例:

var TerminalExpression = function(data){ this.data = data; this.interpret = function(context){ if(context === this.data){ return true; } return false; }} var OrExpression = function(exprArr){ this.exprArr = exprArr; this.interpret = function(context){ var isMatch = false; this.exprArr.map(function(item){ if(item.interpret(context)){isMatch = true; } }) return isMatch; }} var AndExpression = function(exprArr){ this.exprArr = exprArr; this.interpret = function(context){ var isMatch = true; this.exprArr.map(function(item){ if(!item.interpret(context)){isMatch = false; } }) return isMatch; }} function getEvenExpression(){ var ExpressionList = []; for(var i = -10; i<100; i++){ if(i % 2 == 0){ ExpressionList.push(new TerminalExpression(i)); } } return new OrExpression(ExpressionList);} function getOddExpression(){ var ExpressionList = []; for(var i = -10; i<100; i++){ if(i % 2 != 0){ ExpressionList.push(new TerminalExpression(i)); } } return new OrExpression(ExpressionList);} function getNegativeOddExpression(){ var ExpressionList = []; for(var i = -10; i<100; i++){ if(i < 0){ ExpressionList.push(new TerminalExpression(i)); } } return new OrExpression(ExpressionList);} var isEven = getEvenExpression();var isOdd = getOddExpression();var isNegative = getNegativeOddExpression();var isNegativeAndOdd = new AndExpression([isNegative,isOdd]); console.log(’2是偶數(shù)嗎? ’ + isEven.interpret(2));//2是偶數(shù)嗎? trueconsole.log(’3是偶數(shù)嗎? ’ + isEven.interpret(3));//3是偶數(shù)嗎? falseconsole.log(’3是奇數(shù)嗎? ’ + isOdd.interpret(3));//3是奇數(shù)嗎? trueconsole.log(’3是負(fù)數(shù)嗎? ’ + isNegative.interpret(3));//3是負(fù)數(shù)嗎? falseconsole.log(’-3是負(fù)數(shù)嗎? ’ + isNegative.interpret(-3));//-3是負(fù)數(shù)嗎? trueconsole.log(’-3是負(fù)奇數(shù)嗎? ’ + isNegativeAndOdd.interpret(-3));//-3是負(fù)奇數(shù)嗎? trueconsole.log(’-4是負(fù)奇數(shù)嗎? ’ + isNegativeAndOdd.interpret(-4));//-4是負(fù)奇數(shù)嗎? falseconsole.log(’3是負(fù)奇數(shù)嗎? ’ + isNegativeAndOdd.interpret(3));//3是負(fù)奇數(shù)嗎? false

上面的例子中TerminalExpression被稱為終結(jié)符表達(dá)式類,封裝底層的判斷條件,一般解釋器模式中只會(huì)存在少數(shù)幾個(gè)終結(jié)符表達(dá)式類。OrExpression,AndExpression稱為非終結(jié)符表達(dá)式類,是基于多個(gè)終結(jié)符表達(dá)式組合而成相對(duì)復(fù)雜的邏輯。解釋器模式最核心的就是這兩個(gè)類,基于他們可以擴(kuò)展組合出豐富多樣的條件。雖然解釋器模式的使用頻率不是特別高,但是它在正則表達(dá)式,xml文檔解釋等領(lǐng)域還是得到了廣泛的應(yīng)用。

解釋器模式總結(jié):

優(yōu)點(diǎn):* 易于擴(kuò)展和修改文法規(guī)則。增加時(shí)只需要增加新的終結(jié)符表達(dá)式,符合開(kāi)關(guān)原則。

缺點(diǎn):* 對(duì)于復(fù)雜文法難以維護(hù),會(huì)充滿非終結(jié)表達(dá)式。* 執(zhí)行效率低,由于使用了大量循環(huán)和遞歸調(diào)用,在解釋復(fù)雜句子時(shí)速度很慢。

適用場(chǎng)景:* 可以將一個(gè)需要解釋執(zhí)行的語(yǔ)言中的句子表示為一個(gè)抽象語(yǔ)法樹(shù)* 一些重復(fù)出現(xiàn)的問(wèn)題可以用一種簡(jiǎn)單的語(yǔ)言來(lái)進(jìn)行表達(dá)* 一個(gè)語(yǔ)言文法較為簡(jiǎn)單* 執(zhí)行效率不是關(guān)鍵問(wèn)題

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 欧美一级欧美三级在线观看 | 欧美日韩一区二区不卡 | 91精品国产一区二区三区四区在线 | 亚洲一区二区在线视频 | 国产精品久久综合 | 日韩三区在线 | 久久久成人精品 | 老司机深夜福利视频 | 国产高清视频在线观看 | 国产在线观看欧美 | 日本一级毛片视频 | 一区二区视频 | 自拍偷拍欧美 | 成人a网 | 亚洲一区二区三区四区在线观看 | 99久热精品| 来个毛片| 91 视频网站 | 欧美日韩一二三区 | 欧美一区二区免费在线 | 国产精品美女久久久久aⅴ国产馆 | 成人免费在线 | 久久精品久久综合 | 亚洲精品中文字幕在线观看 | 色婷婷亚洲一区二区三区 | 99精品网站 | 99精品欧美一区二区蜜桃免费 | www.在线播放 | 99精品视频在线观看 | 综合久久色 | 国产在线一二三区 | 国产伦精品一区二区三区在线 | 成人深夜福利在线观看 | 最新午夜| 日韩美女av在线 | 日韩成人免费电影 | 91亚洲成人 | 一区二区福利 | 国产特黄一级 | 国产精品一区在线看 | 黄a在线看 |