亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2020年04月17日 08:49:53   作者:李小強  
這篇文章主要介紹了javascript設計模式 – 解釋器模式,結(jié)合實例形式分析了javascript解釋器模式相關概念、原理、用法及操作注意事項,需要的朋友可以參考下

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

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

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

場景:我們實現(xiàn)一個解釋器,用來判斷傳遞的數(shù)字是奇數(shù)還是偶數(shù),是正數(shù)還是負數(shù),是正奇數(shù)還是負奇數(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ù)嗎? true
console.log('3是偶數(shù)嗎? ' + isEven.interpret(3));//3是偶數(shù)嗎? false
console.log('3是奇數(shù)嗎? ' + isOdd.interpret(3));//3是奇數(shù)嗎? true
console.log('3是負數(shù)嗎? ' + isNegative.interpret(3));//3是負數(shù)嗎? false
console.log('-3是負數(shù)嗎? ' + isNegative.interpret(-3));//-3是負數(shù)嗎? true
console.log('-3是負奇數(shù)嗎? ' + isNegativeAndOdd.interpret(-3));//-3是負奇數(shù)嗎? true
console.log('-4是負奇數(shù)嗎? ' + isNegativeAndOdd.interpret(-4));//-4是負奇數(shù)嗎? false
console.log('3是負奇數(shù)嗎? ' + isNegativeAndOdd.interpret(3));//3是負奇數(shù)嗎? false
 

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

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

優(yōu)點:
* 易于擴展和修改文法規(guī)則。增加時只需要增加新的終結(jié)符表達式,符合開關原則。

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

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

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

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

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

相關文章

  • 詳解JavaScript如何設置私有屬性

    詳解JavaScript如何設置私有屬性

    這篇文章主要為大家詳細介紹了在JavaScript中如何設置私有屬性,文中的示例代碼講解詳細,具有一定的借鑒價值,有需要的小伙伴可以參考下
    2024-03-03
  • 微信小程序獲取微信運動步數(shù)的實例代碼

    微信小程序獲取微信運動步數(shù)的實例代碼

    本篇文章主要介紹了微信小程序微信運動步數(shù)的實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • JS實現(xiàn)判斷兩個日期不能跨年和跨月

    JS實現(xiàn)判斷兩個日期不能跨年和跨月

    這篇文章主要為大家詳細介紹了如何利用JavaScript語言實現(xiàn)判斷兩個日期不能跨年和跨月,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-04-04
  • javascript解決innerText瀏覽器兼容問題思路代碼

    javascript解決innerText瀏覽器兼容問題思路代碼

    innerText瀏覽器兼容這塊始終都是一個問題,下面與大家分享下使用javascript解決,感興趣的朋友可以參考下哈,希望對你有所幫助
    2013-05-05
  • js右下角彈出提示框示例代碼

    js右下角彈出提示框示例代碼

    這篇文章主要介紹了js右下角彈出提示框示例代碼,即網(wǎng)頁右下角彈出廣告信息框?qū)嵗a,感興趣的小伙伴們可以參考一下
    2016-01-01
  • JavaScript利用crypto模塊實現(xiàn)加解密

    JavaScript利用crypto模塊實現(xiàn)加解密

    crypto模塊提供了加密功能,包含對 OpenSSL 的哈希、HMAC、加密、解密、簽名、以及驗證功能的一整套封裝。本文將利用它實現(xiàn)加解密算法,需要的可以參考一下
    2023-02-02
  • IE6圖片加載的一個BUG解決方法

    IE6圖片加載的一個BUG解決方法

    小圖整合在一張大圖里,然后在不同的CSS里調(diào)用同一張圖片,以此來減少請求數(shù),這是頁面優(yōu)化最常用的手段,但IE6會對頁面里同一個圖片,只要在不同的地方有引用到就會重新請求一次,需要加JS代碼解決。
    2010-07-07
  • javascript中2個感嘆號的用法實例詳解

    javascript中2個感嘆號的用法實例詳解

    這篇文章主要介紹了javascript中2個感嘆號的用法,并用大量的實例講述了!!的常見應用情況,是非常實用的技巧,需要的朋友可以參考下
    2014-09-09
  • 小程序云開發(fā)獲取不到數(shù)據(jù)庫記錄的解決方法

    小程序云開發(fā)獲取不到數(shù)據(jù)庫記錄的解決方法

    這篇文章主要為大家詳細介紹了小程序云開發(fā)獲取不到數(shù)據(jù)庫記錄的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • TypeScript調(diào)整數(shù)組元素順序算法

    TypeScript調(diào)整數(shù)組元素順序算法

    數(shù)組類型在TS中可以使用多種方式,比較靈活,下面這篇文章主要給大家介紹了關于TypeScript調(diào)整數(shù)組元素順序算法的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04

最新評論