天天看點

Head First設計模式之解釋器模式

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

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

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

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

Head First設計模式之解釋器模式

  組成:   

  AbstractExpression(抽象表達式):定義解釋器的接口,約定解釋器的解釋操作。

  TerminalExpression(終結符表達式):用來實作文法規則中和終結符相關的操作,不再包含其它的解釋器,如果用組合模式來建構抽象文法樹的話,就相當于組合模式中的葉子對象,可以有多種終結符解釋器。

  NonterminalExpression(非終結符表達式):用來實作文法規則中非終結符相關的操作,通常一個解釋器對應一個文法規則,可以包含其它的解釋器,如果用組合模式來建構抽象文法樹的話,就相當于組合模式中的組合對象,可以有多種非終結符解釋器。

  Context(上下文):它包含了解釋器之外一些其他的全局資訊;通常包含各個解釋器需要的資料,或是公共的功能。

  Client(用戶端):指的是使用解釋器的用戶端,通常在這裡去把按照語言的文法做的表達式,轉換成為使用解釋器對象描述的抽象文法樹,然後調用解釋操作。

 1、可以将一個需要解釋執行的語言中的句子表示為一個抽象文法樹。

2、一些重複出現的問題可以用一種簡單的語言來進行表達。

3、一個簡單文法需要解釋的場景。

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

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

 參考

http://www.runoob.com/design-pattern/interpreter-pattern.html

http://www.cnblogs.com/JsonShare/p/7367535.html

http://www.cnblogs.com/springyangwc/archive/2011/05/05/2037146.html

繼續閱讀