亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

javascript設計模式 ? 解釋器模式原理與用法實例分析

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

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

介紹:之前在做java開發時,數據庫的增刪改查特別頻繁,并且場景不同需要用到的SQL語句頁都不同,如何用調用方法的形式來使用sql語句,拼接sql?這就是這一節我們要講的解釋器模式。

定義:定義一個語言的文法,并且建立一個解釋器來解釋該語言中的句子,這里的語言是指使用規定格式和語法的代碼。解釋器模式是一種類行為型模式。

場景:我們實現一個解釋器,用來判斷傳遞的數字是奇數還是偶數,是正數還是負數,是正奇數還是負奇數。

示例:

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是偶數嗎? ’ + isEven.interpret(2));//2是偶數嗎? trueconsole.log(’3是偶數嗎? ’ + isEven.interpret(3));//3是偶數嗎? falseconsole.log(’3是奇數嗎? ’ + isOdd.interpret(3));//3是奇數嗎? trueconsole.log(’3是負數嗎? ’ + isNegative.interpret(3));//3是負數嗎? falseconsole.log(’-3是負數嗎? ’ + isNegative.interpret(-3));//-3是負數嗎? trueconsole.log(’-3是負奇數嗎? ’ + isNegativeAndOdd.interpret(-3));//-3是負奇數嗎? trueconsole.log(’-4是負奇數嗎? ’ + isNegativeAndOdd.interpret(-4));//-4是負奇數嗎? falseconsole.log(’3是負奇數嗎? ’ + isNegativeAndOdd.interpret(3));//3是負奇數嗎? false

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

解釋器模式總結:

優點:* 易于擴展和修改文法規則。增加時只需要增加新的終結符表達式,符合開關原則。

缺點:* 對于復雜文法難以維護,會充滿非終結表達式。* 執行效率低,由于使用了大量循環和遞歸調用,在解釋復雜句子時速度很慢。

適用場景:* 可以將一個需要解釋執行的語言中的句子表示為一個抽象語法樹* 一些重復出現的問題可以用一種簡單的語言來進行表達* 一個語言文法較為簡單* 執行效率不是關鍵問題

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

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 欧洲一级做a爱在线观看 | 欧美一级做a影片爱橙影院 欧美一级做一a做片性视频 | 色综合视频一区二区三区 | 久久亚洲精品无码观看不卡 | 日韩高清第一页 | 妞干网最新 | 久久精品午夜视频 | 国产精品久久99 | 亚洲黄色免费网站 | 日本一级www | 久久香蕉国产线看观看精品蕉 | 国产又色又爽在线观看 | 欧美成人免费看片一区 | 国产在线视频国产永久视频 | 欧美日韩无| 啪啪一级片| 久碰香蕉精品视频在线观看 | 成人偷拍自拍 | 99久久精品无码一区二区毛片 | 精品欧美日韩一区二区三区 | 理论片我不卡在线观看 | 九九精品99久久久香蕉 | 亚洲日韩色综合视频 | 91香蕉福利一区二区三区 | 国产亚洲欧美在线人成aaaa | 免费一级特黄视频 | 一级免费视频 | 欧美成人xxxxxxxx在线 | 国产播放啪视频免费视频 | 97视频福利 | 五月天婷婷网亚洲综合在线 | 欧美一区二区三区国产精品 | 在线观看日本免费视频大片 | 久久夜色精品国产 | 手机看片欧美日韩 | 国产精品一区在线观看 | 91精品啪在线观看国产色 | jizz国产在线观看 | 国产成人免费无庶挡视频 | 翔田千里中文在线播放 | 涩涩色中文综合亚洲 |