奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

java語言

解析Java的設計模式編程之解釋器模式的運用

時間:2024-05-19 07:23:26 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進行運算處理,避免使用解釋器模式的四則運算,效率和性能各方面表現良好。

【解析Java的設計模式編程之解釋器模式的運用】相關文章:

photoshop柔光模式和疊加模式的運用教程03-31

JAVA多線程之線程間的通信方式解析04-02

java教程之Java編程基礎12-03

簡單講解Java的Future編程模式方案04-03

教學設計模式的類型02-15

C語言編程中使用設計模式中的原型模式的講解04-01

tplink迷你路由器AP模式設置方法介紹07-27

交互設計的用戶行為模式詳解11-16

java語言源碼解析03-30

主站蜘蛛池模板: 凤翔县| 明溪县| 沁源县| 启东市| 九江市| 鄂温| 大兴区| 石狮市| 巢湖市| 扬中市| 全椒县| 宁海县| 弥渡县| 松潘县| 仁化县| 苏尼特右旗| 红桥区| 社旗县| 滨海县| 安顺市| 黑龙江省| 电白县| 祁门县| 晋州市| 博兴县| 台州市| 仲巴县| 平湖市| 遂宁市| 河南省| 玉龙| 鄂尔多斯市| 繁峙县| 剑阁县| 临澧县| 二连浩特市| 淄博市| 于都县| 常州市| 民县| 邵阳县|