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

java語言

解析Java的設(shè)計(jì)模式編程之解釋器模式的運(yùn)用

時(shí)間:2025-01-21 08:18:08 java語言 我要投稿
  • 相關(guān)推薦

解析Java的設(shè)計(jì)模式編程之解釋器模式的運(yùn)用

  0.解釋器(Interpreter)模式定義 :

  給定一門語言,定義它的文法的一種表示,并定義一個(gè)解釋器,該解釋器使用該表示來解釋語言中句子。 屬于行為型模式。

  解釋器模式在實(shí)際的系統(tǒng)開發(fā)中使用的非常少,因?yàn)樗鼤鹦省⑿阅芤约熬S護(hù)等問題。

  解釋器模式的通用類圖如圖所示。

  1.解釋器模式的優(yōu)點(diǎn)

  解釋器是一個(gè)簡單語法分析工具,它最顯著的優(yōu)點(diǎn)就是擴(kuò)展性,修改語法規(guī)則只要修改相應(yīng)的非終結(jié)符表達(dá)式就可以了,若擴(kuò)展語法,則只要增加非終結(jié)符類就可以了。

  2.解釋器模式的缺點(diǎn)

  解釋器模式會引起類膨脹:每個(gè)語法都要產(chǎn)生一個(gè)非終結(jié)符表達(dá)式,語法規(guī)則比較復(fù)雜時(shí),就可能產(chǎn)生大量的類文件,為維護(hù)帶來了非常多的麻煩。

  解釋器模式采用遞歸調(diào)用方法:每個(gè)非終結(jié)符表達(dá)式只關(guān)心與自己有關(guān)的表達(dá)式,每個(gè)表達(dá)式需要知道最終的結(jié)果,必須一層一層地剝繭,無論是面向過程的語言還是面向?qū)ο蟮恼Z言,遞歸都是在必要條件下使用的,它導(dǎo)致調(diào)試非常復(fù)雜。想想看,如果要排查一個(gè)語法錯(cuò)誤,我們是不是要一個(gè)一個(gè)斷點(diǎn)的調(diào)試下去,直到最小的語法單元。

  效率問題:解釋器模式由于使用了大量的循環(huán)和遞歸,效率是個(gè)不容忽視的問題,特別是用于解析復(fù)雜、冗長的語法時(shí),效率是難以忍受的。

  3.解釋器模式的使用場景

  重復(fù)發(fā)生的問題可以使用解釋器模式:例如,多個(gè)應(yīng)用服務(wù)器,每天產(chǎn)生大量的日志,需要對日志文件進(jìn)行分析處理,由于各個(gè)服務(wù)器的日志格式不同,但是數(shù)據(jù)要素是相同的,按照解釋器的說法就是終結(jié)符表達(dá)式都是相同的,但是非終結(jié)符表達(dá)式就需要制定了。在這種情況下,可以通過程序來一勞永逸地解決該問題。

  一個(gè)簡單語法需要解釋的場景:為什么是簡單?看看非終結(jié)表達(dá)式,文法規(guī)則越多,復(fù)雜度越高,而且類間還要進(jìn)行遞歸調(diào)用(看看我們例子中的堆棧),不是一般地復(fù)雜。想想看,多個(gè)類之間的調(diào)用你需要什么樣的耐心和信心去排查問題。因此,解釋器模式一般用來解析比較標(biāo)準(zhǔn)的字符集,例如SQL語法分析,不過該部分逐漸被專用工具所取代。在某些特用的商業(yè)環(huán)境下也會采用解釋器模式,我們剛剛的例子就是一個(gè)商業(yè)環(huán)境,而且現(xiàn)在模型運(yùn)算的例子非常多,目前很多商業(yè)機(jī)構(gòu)已經(jīng)能夠提供出大量的數(shù)據(jù)進(jìn)行分析。

  4.簡單例子

  /** * 聲明一個(gè)抽象的解釋操作 */ public interface Interpreter { public void interpret(Context context); //實(shí)際中,可以有個(gè)返回的類型,定義解釋出的數(shù)據(jù)對象 } 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數(shù)據(jù)"); new XmlSaxInterpreter().interpret(context); new XmlDomInterpreter().interpret(context); } }

  5.解釋器模式的注意事項(xiàng)

  盡量不要在重要的模塊中使用解釋器模式,否則維護(hù)會是一個(gè)很大的問題。在項(xiàng)目中可以使用shell、JRuby、Groovy等腳本語言來代替解釋器模式,彌補(bǔ)Java編譯型語言的不足。我們在一個(gè)銀行的分析型項(xiàng)目中就采用JRuby進(jìn)行運(yùn)算處理,避免使用解釋器模式的四則運(yùn)算,效率和性能各方面表現(xiàn)良好。

【解析Java的設(shè)計(jì)模式編程之解釋器模式的運(yùn)用】相關(guān)文章:

java設(shè)計(jì)模式:多例模式08-12

java設(shè)計(jì)模式:裝飾模式07-08

java設(shè)計(jì)模式:工廠模式05-27

java設(shè)計(jì)模式:DAO模式03-13

Java的設(shè)計(jì)模式編程中責(zé)任鏈模式的運(yùn)用的實(shí)例講解07-07

JAVA設(shè)計(jì)模式之單例模式07-29

Java單例設(shè)計(jì)模式04-25

photoshop柔光模式和疊加模式的運(yùn)用教程12-27

Java的結(jié)構(gòu)型模式07-09

主站蜘蛛池模板: 永胜县| 屏南县| 张家界市| 南丹县| 鹤壁市| 黔西| 澄城县| 怀仁县| 河间市| 德阳市| 海丰县| 昌图县| 台南县| 巴塘县| 白水县| 宜州市| 宁河县| 闵行区| 赤城县| 乐昌市| 汤原县| 刚察县| 如皋市| 五原县| 武邑县| 贵南县| 平谷区| 吉木乃县| 攀枝花市| 永和县| 区。| 阳东县| 丰城市| 大荔县| 高邑县| 洪洞县| 弥渡县| 台东县| 景洪市| 兴业县| 汉中市|