程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java設計形式編程之說明器形式的簡略講授

Java設計形式編程之說明器形式的簡略講授

編輯:關於JAVA

Java設計形式編程之說明器形式的簡略講授。本站提示廣大學習愛好者:(Java設計形式編程之說明器形式的簡略講授)文章只能為提供參考,不一定能成為您想要的結果。以下是Java設計形式編程之說明器形式的簡略講授正文


0.說明器(Interpreter)形式界說 :
給定一門說話,界說它的文法的一種表現,並界說一個說明器,該說明器應用該表現來說明說話中句子。 屬於行動型形式。
說明器形式在現實的體系開辟中應用的異常少,由於它會惹起效力、機能和保護等成績。
說明器形式的通用類圖如圖所示。

1.說明器形式的長處

說明器是一個簡略語法剖析對象,它最明顯的長處就是擴大性,修正語律例則只需修正響應的非終結符表達式便可以了,若擴大語法,則只需增長非終結符類便可以了。

2.說明器形式的缺陷

說明器形式會惹起類收縮:每一個語法都要發生一個非終結符表達式,語律例則比擬龐雜時,便可能發生年夜量的類文件,為保護帶來了異常多的費事。
說明器形式采取遞歸挪用辦法:每一個非終結符表達式只關懷與本身有關的表達式,每一個表達式須要曉得終究的成果,必需一層一層地剝繭,不管是面向進程的說話照樣面向對象的說話,遞歸都是在需要前提下應用的,它招致調試異常龐雜。想一想看,假如要排查一個語法毛病,我們是否是要一個一個斷點的調試下去,直到最小的語法單位。
效力成績:說明器形式因為應用了年夜量的輪回和遞歸,效力是個不容疏忽的成績,特殊是用於解析龐雜、冗雜的語法時,效力是難以忍耐的。

3.說明器形式的應用場景

反復產生的成績可使用說明器形式:例如,多個運用辦事器,天天發生年夜量的日記,須要對日記文件停止剖析處置,因為各個辦事器的日記格局分歧,然則數據要素是雷同的,依照說明器的說法就是終結符表達式都是雷同的,然則非終結符表達式就須要制訂了。在這類情形下,可以經由過程法式來與日俱增地處理該成績。
一個簡略語法須要說明的場景:為何是簡略?看看非終結表達式,文律例則越多,龐雜度越高,並且類間還要停止遞歸挪用(看看我們例子中的客棧),不是普通地龐雜。想一想看,多個類之間的挪用你須要甚麼樣的耐煩和信念去排盤問題。是以,說明器形式普通用來解析比擬尺度的字符集,例如SQL語法剖析,不外該部門逐步被公用對象所代替。在某些特用的貿易情況下也會采取說明器形式,我們方才的例子就是一個貿易情況,並且如今模子運算的例子異常多,今朝許多貿易機構曾經可以或許供給出年夜量的數據停止剖析。

4.簡略例子

/** 
 * 聲明一個籠統的說明操作 
 */ 
public interface Interpreter { 
   
  public void interpret(Context context); //現實中,可以有個前往的類型,界說說明出的數據對象 
} 

public class XmlSaxInterpreter implements Interpreter { 
 
  @Override 
  public void interpret(Context context) { 
    System.out.println("xml sax Interpreter:" + context.getData()); 
  } 
 
} 

public class XmlDomInterpreter implements Interpreter { 
 
  @Override 
  public void interpret(Context context) { 
    System.out.println("xml dom Interpreter:" + context.getData()); 
  } 
 
} 

/** 
 * 包括說明器以外的一些信息 
 */ 
public class Context { 
  private String data; 
   
  public String getData() { 
    return data; 
  } 
   
  public void setData(String data) { 
    this.data = data; 
  } 
} 

public class Test { 
  public static void main(String[] args) { 
    Context context = new Context(); 
    context.setData("一段xml數據"); 
    new XmlSaxInterpreter().interpret(context); 
    new XmlDomInterpreter().interpret(context); 
  } 
} 

5.說明器形式的留意事項

盡可能不要在主要的模塊中應用說明器形式,不然保護會是一個很年夜的成績。在項目中可使用shell、JRuby、Groovy等劇本說話來取代說明器形式,填補Java編譯型說話的缺乏。我們在一個銀行的剖析型項目中就采取JRuby停止運算處置,防止應用說明器形式的四則運算,效力和機能各方面表示優越。


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved