解釋器模式如何在Java項(xiàng)目中實(shí)現(xiàn)?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
創(chuàng)新互聯(lián)是專業(yè)的克井網(wǎng)站建設(shè)公司,克井接單;提供成都網(wǎng)站制作、成都做網(wǎng)站,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行克井網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
定義:給定一種語言,定義他的文法的一種表示,并定義一個(gè)解釋器,該解釋器使用該表示來解釋語言中句子。
類型:行為類模式
類圖:
解釋器模式是一個(gè)比較少用的模式,本人之前也沒有用過這個(gè)模式。下面我們就來一起看一下解釋器模式。
解釋器模式的結(jié)構(gòu)
代碼實(shí)現(xiàn)
class Context {} abstract class Expression { public abstract Object interpreter(Context ctx); } class TerminalExpression extends Expression { public Object interpreter(Context ctx){ return null; } } class NonterminalExpression extends Expression { public NonterminalExpression(Expression...expressions){ } public Object interpreter(Context ctx){ return null; } } public class Client { public static void main(String[] args){ String expression = ""; char[] charArray = expression.toCharArray(); Context ctx = new Context(); Stackstack = new Stack (); for(int i=0;i
文法遞歸的代碼部分需要根據(jù)具體的情況來實(shí)現(xiàn),因此在代碼中沒有體現(xiàn)。抽象表達(dá)式是生成語法集合的關(guān)鍵,每個(gè)非終結(jié)符表達(dá)式解釋一個(gè)最小的語法單元,然后通過遞歸的方式將這些語法單元組合成完整的文法,這就是解釋器模式。
解釋器模式的優(yōu)缺點(diǎn)
解釋器是一個(gè)簡單的語法分析工具,它最顯著的優(yōu)點(diǎn)就是擴(kuò)展性,修改語法規(guī)則只需要修改相應(yīng)的非終結(jié)符就可以了,若擴(kuò)展語法,只需要增加非終結(jié)符類就可以了。
但是,解釋器模式會(huì)引起類的膨脹,每個(gè)語法都需要產(chǎn)生一個(gè)非終結(jié)符表達(dá)式,語法規(guī)則比較復(fù)雜時(shí),就可能產(chǎn)生大量的類文件,為維護(hù)帶來非常多的麻煩。同時(shí),由于采用遞歸調(diào)用方法,每個(gè)非終結(jié)符表達(dá)式只關(guān)心與自己相關(guān)的表達(dá)式,每個(gè)表達(dá)式需要知道最終的結(jié)果,必須通過遞歸方式,無論是面向?qū)ο蟮恼Z言還是面向過程的語言,遞歸都是一個(gè)不推薦的方式。由于使用了大量的循環(huán)和遞歸,效率是一個(gè)不容忽視的問題。特別是用于解釋一個(gè)解析復(fù)雜、冗長的語法時(shí),效率是難以忍受的。
解釋器模式的適用場景
在以下情況下可以使用解釋器模式:
注意事項(xiàng)
解釋器模式真的是一個(gè)比較少用的模式,因?yàn)閷?duì)它的維護(hù)實(shí)在是太麻煩了,想象一下,一坨一坨的非終結(jié)符解釋器,假如不是事先對(duì)文法的規(guī)則了如指掌,或者是文法特別簡單,則很難讀懂它的邏輯。解釋器模式在實(shí)際的系統(tǒng)開發(fā)中使用的很少,因?yàn)樗麜?huì)引起效率、性能以及維護(hù)等問題。
看完上述內(nèi)容,你們掌握解釋器模式如何在Java項(xiàng)目中實(shí)現(xiàn)的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!