天天看點

設計模式學習總結(22) 解釋器模式

本系列主要記錄設計模式的意圖是什麼,它要解決一個什麼問題,什麼時候可以使用它;它是如何解決的,掌握它的結構圖,記住它的關鍵代碼;能夠想到至少兩個它的應用執行個體,一個生活中的,一個軟體中的;這個模式的優缺點是什麼,其有哪些使用場景,在使用時要注意什麼。

尊重作者,轉載請注明晔陽的blog

22.解釋器模式

意圖:給定一個語言, 定義它的文法表示, 并定 義一個解釋器, 這個解釋器使用該辨別來解釋語言中的句子。

主要解決:對于一些固定文法建構一個解釋句子的解釋器

什麼時候使用:如果一種特定類型的問題發生的頻率足夠高,那麼可能就值得将該問題的各個執行個體表述為一個簡單語言中的句子.這樣就可以建構一個解釋器,該解釋器通過解釋這些句子來解決該問題.

如何解決 :構件文法樹,定義終結符與非終結符

結構圖:

設計模式學習總結(22) 解釋器模式

關鍵代碼:構件環境類,包含解釋器之外的一些全局資訊,一般是hashmap

應用執行個體:編譯器、運算表達式計算

優點: 1、 可擴充性比較好,靈活。  2、 增加了新的解釋表達式的方式  3、 易于實作簡單文法。

缺點: 可利用場景比較少   2、 對于複雜的文法比較難維護。3、解釋器模式會引起類膨脹 4、解釋器模式采用遞歸調用方法

使用場景:1、可以将一個需要解釋執行的語言中的句子表示為一個抽象文法樹 2、一些重複出現的問題可以用一種簡單的語言來進行表達 3、一個簡單文法需要解釋的場景

注意事項:可利用場景比較少,java中如果碰到可以用expression4j代替

繼續閱讀