設(shè)計模式-解釋器模式

模式定義:

解釋器模式(Interpreter Pattern)提供了評估語言的語法或表達式的方式,它屬于行為型模式绎谦。這種模式實現(xiàn)了一個表達式接口洞渔,該接口解釋一個特定的上下文挫望。這種模式被用在 SQL 解析后控、符號處理引擎等。

\color{#ea4335}{意圖:} 給定一個語言幸冻,定義它的文法表示粹庞,并定義一個解釋器,這個解釋器使用該標(biāo)識來解釋語言中的句子洽损。

\color{#ea4335}{主要解決:}對于一些固定文法構(gòu)建一個解釋句子的解釋器庞溜。

\color{#ea4335}{何時使用:}如果一種特定類型的問題發(fā)生的頻率足夠高,那么可能就值得將該問題的各個實例表述為一個簡單語言中的句子碑定。這樣就可以構(gòu)建一個解釋器强缘,該解釋器通過解釋這些句子來解決該問題督惰。

\color{#ea4335}{如何解決:}構(gòu)建語法樹,定義終結(jié)符與非終結(jié)符旅掂。

\color{#ea4335}{關(guān)鍵代碼:}構(gòu)建環(huán)境類赏胚,包含解釋器之外的一些全局信息,一般是 HashMap商虐。

實現(xiàn)

我們將創(chuàng)建一個接口 Expression 和實現(xiàn)了 Expression 接口的實體類觉阅。定義作為上下文中主要解釋器的 TerminalExpression 類。其他的類 OrExpression秘车、AndExpression 用于創(chuàng)建組合式表達式典勇。

InterpreterPatternDemo,我們的演示類使用 Expression 類創(chuàng)建規(guī)則和演示表達式的解析叮趴。

解釋器模式

源碼:代碼倉庫

總結(jié):

\color{#ea4335}{優(yōu)點:}
1割笙、可擴展性比較好,靈活眯亦。
2伤溉、增加了新的解釋表達式的方式实束。
3猬仁、易于實現(xiàn)簡單文法恭陡。

\color{#ea4335}{缺點:}
1循捺、可利用場景比較少。
2洋访、對于復(fù)雜的文法比較難維護银择。
3邮旷、解釋器模式會引起類膨脹孤里。
4伏伯、解釋器模式采用遞歸調(diào)用方法。

\color{#ea4335}{使用場景:}
1捌袜、可以將一個需要解釋執(zhí)行的語言中的句子表示為一個抽象語法樹舵鳞。
2、一些重復(fù)出現(xiàn)的問題可以用一種簡單的語言來進行表達琢蛤。
3、一個簡單語法需要解釋的場景抛虏。

\color{#ea4335}{注意事項:}可利用場景比較少博其,JAVA 中如果碰到可以用 expression4J 代替。

參考:菜鳥教程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末迂猴,一起剝皮案震驚了整個濱河市慕淡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沸毁,老刑警劉巖峰髓,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件傻寂,死亡現(xiàn)場離奇詭異,居然都是意外死亡携兵,警方通過查閱死者的電腦和手機疾掰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來徐紧,“玉大人静檬,你說我怎么就攤上這事〔⒓叮” “怎么了拂檩?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵嘲碧,是天一觀的道長稻励。 經(jīng)常有香客問我愈涩,道長,這世上最難降的妖魔是什么钠署? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任糠聪,我火速辦了婚禮,結(jié)果婚禮上谐鼎,老公的妹妹穿的比我還像新娘。我一直安慰自己狸棍,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布草戈。 她就那樣靜靜地躺著塌鸯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪唐片。 梳的紋絲不亂的頭發(fā)上丙猬,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天费韭,我揣著相機與錄音茧球,去河邊找鬼星持。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的穷吮。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼捡鱼,長吁一口氣:“原來是場噩夢啊……” “哼肪凛!你這毒婦竟也來了堰汉?” 一聲冷哼從身側(cè)響起伟墙,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎就乓,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體生蚁,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡戏自,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了志衣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡念脯,死狀恐怖弯淘,靈堂內(nèi)的尸體忽然破棺而出绿店,到底是詐尸還是另有隱情,我是刑警寧澤假勿,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布态鳖,位于F島的核電站转培,受9級特大地震影響郁惜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兆蕉,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一虎韵、第九天 我趴在偏房一處隱蔽的房頂上張望易稠。 院中可真熱鬧包蓝,春花似錦、人聲如沸测萎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至或辖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間颂暇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工耳鸯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留榆骚,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓妓肢,卻偏偏與公主長得像,于是被迫代替她去往敵國和親碉钠。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容