Interpreter(解释器)--类行为型模式
Interpreter(解釋器)–類行為型模式
一、意圖
給定一個語言,定義它的文法的一種表示,并定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。
二、動機
1.在軟件構建過程中,如果某一特定領域的問題比較復雜,類似的結構不斷重復出現,如果使用普通的編程方式來實現將面臨非常頻繁的變化。
2.在這種情況下,將特定領域的問題表達為某種語法規則下的句子,然后構建一個解釋器解釋這樣的句子,從而達到解決問題的目的。
三、適用性
當一個語言需要解釋器執行,并且你可將該語言中的句子表示為一個抽象語法樹時,可使用解釋器模式。而存在以下情況時該模式效果最好。
1.該文法簡單對于復雜的文法,文法的類層次變得龐大而無法管理。此時語法分析程序生成器這樣的工具是更好的選擇。它們無需構造抽象語法樹即可解釋表達式,這樣可以節省空間而已還可以節省時間。
2.效率不是一個關鍵問題最高效的解釋器通常不是通過直接解釋語法分析樹實現的,而是首先將它們轉換成另一種形式。例如,正則表達式通常被轉換為狀態機。但即使在這種情況下,轉換器仍可用解釋器模式實現,該模式仍是有用的。
四、結構
五、效果
1.易于改變和擴展文法。 因為該模式使用類來表示文法規則,你可使用繼承來改變或擴展該文法。已有的表達式可被增量式的改變,而新的表達式可定義為舊表達式的變體。
2.也易于實現文法。 定義抽象語法樹中各個節點的類的實現大體類似。這些類易于直接編寫,通常它們也可用一個編譯器或語法分析程序生成器自動生成。
3.復雜的文法難以維護。 解釋器模式為文法中的每一條規則至少定義了一個類。因此包含許多規則的文法可能難以管理和維護。可應用其他的設計模式來緩解這一問題。但當文法非常復雜時,其他的技術如語法分析程序或編譯器生成器更為合適。
4.增加了新的解釋器表達式的方式。 解釋器模式使得實現新表達式“計算”變得容易。例如,你可以在表達式類上定義一個新的操作以支持優美打印或表達式的類型檢查。如果你經常創建新的解釋表達式的方式,那么可以考慮使用Visitor模式以避免修改這些代表文法的類。
六、實現
1.創建抽象語法樹。
2.定義解釋器。
3.與Flyweight模式共享終結符。
七、要點總結
1.Interpreter模式的應用場合是Interpreter模式應用中的難點,只有滿足“業務規則頻繁變化,且類似的結構不斷重復出現,并且容易抽象為語法規則的問題”才適合使用Interpreter模式。
2.使用Interpreter模式來表示文法規則,從而可以使用面向對象技巧方便地“擴展”文法。
3.Interpreter模式比較適合簡單的文法表示,對于復雜的文法表示,Interpreter模式會產生比較大的類層次結構,需要求租與語法分析生成器這樣的標準工具。
八、相關模式
Composite模式:抽象語法樹是一個復合模式的實例。
Flyweight模式:說明了如何在抽象語法樹種共享終結符。
Iterator模式:解釋器可用一個迭代器遍歷該結構。
Visitor模式:可用來在一個類中維護抽象語法樹中各個節點的行為。
九、舉例說明
類似如翻譯
本文為李建忠設計模式視頻的筆記以及《設計模式-可復用面向對象的軟件的基礎》和自己的部分見解
總結
以上是生活随笔為你收集整理的Interpreter(解释器)--类行为型模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Command(命令)--对象行为型模式
- 下一篇: 硬盘接口转USB详细介绍