天天看點

北風設計模式課程---解釋器模式(Interpreter Pattern)

北風設計模式課程---解釋器模式(Interpreter Pattern)

模式動機

北風設計模式課程---解釋器模式(Interpreter Pattern)

如果在系統中某一特定類型的問題發生的頻率很高,此時可以考慮将這些問題的執行個體表述為一個語言中的句子,是以可以建構一個解釋器,該解釋器通過解釋這些句子來解決這些問題。

解釋器模式描述了如何構成一個簡單的語言解釋器,主要應用在使用面向對象語言開發的編譯器中。

模式定義

解釋器模式(Interpreter Pattern) :定義語言的文法,并且建立一個解釋器來解釋該語言中的句子,這裡的“語言”意思是使用規定格式和文法的代碼,它是一種類行為型模式。

Interpreter Pattern: Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language.

Frequency of use: low

UML圖

北風設計模式課程---解釋器模式(Interpreter Pattern)

模式結構

解釋器模式包含如下角色:

AbstractExpression: 抽象表達式

TerminalExpression: 終結符表達式

NonterminalExpression: 非終結符表達式

Context: 環境類

Client: 客戶類

模式分析

解釋器模式描述了如何為簡單的語言定義一個文法,如何在該語言中表示一個句子,以及如何解釋這些句子。

文法規則執行個體:

expression ::= value | symbol

symbol ::= expression '+' expression | expression '-' expression

value ::= an integer //一個整數值

在文法規則定義中可以使用一些符号來表示不同的含義,如使用“|”表示或,使用“{”和“}”表示組合,使用“*”表示出現0次或多次等,其中使用頻率最高的符号是表示或關系的“|” 。

抽象文法樹:

除了使用文法規則來定義一個語言,在解釋器模式中還可以通過一種稱之為抽象文法樹(Abstract Syntax Tree, AST)的圖形方式來直覺地表示語言的構成,每一棵抽象文法樹對應一個語言執行個體。

北風設計模式課程---解釋器模式(Interpreter Pattern)

抽象文法樹描述了如何構成一個複雜的句子,通過對抽象文法樹的分析,可以識别出語言中的終結符和非終結符類。

在解釋器模式中,每一種終結符和非終結符都有一個具體類與之對應,正因為使用類來表示每一個文法規則,使得系統具有較好的擴充性和靈活性。

模式執行個體與解析

以中英文翻譯系統為例來介紹解釋器模式

體系結構

北風設計模式課程---解釋器模式(Interpreter Pattern)

AbstractExpression接口 IExpression.cs

具體的Expression WordExpression.cs

SymbolExpression.cs

Context: 環境類 ChineseEnglishDict.cs

将各部分解釋器組合起來進行包裝,友善使用者調用 Translator.cs

Client:客戶類

模式優缺點

解釋器模式的優點

易于改變和擴充文法。

易于實作文法。

增加了新的解釋表達式的方式。

解釋器模式的缺點

對于複雜文法難以維護。

執行效率較低。

應用場景很有限。

模式适用環境

在以下情況下可以使用解釋器模式:

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

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

文法較為簡單。

效率不是關鍵問題。

【聲明與感謝】

本文,站在許多巨人的肩膀上,借鑒和引用了許多他人擁有版權的作品或著述,在此,對前人們的貢獻緻謝。并同時公布引用的内容、原作者或來源(一些來源于網際網路的内容本人無法追述本源,深表遺憾)。

【參考文獻】

《設計模式—可複用面向對象軟體的基礎》作者: [美] Erich Gamma / Richard Helm / Ralph Johnson / John Vlissides 譯者: 李英軍 / 馬曉星 / 蔡敏 / 劉建中 等 機械工業出版社

《重構—改善既有代碼的設計》作者: Martin Fowler譯者:候捷 中國電力出版社

《靈活軟體開發—原則、模式與實踐》作者: Robert C. Martin 清華大學出版社

《程式員修煉之道—從小工到專家》作者: Andrew Hunt / David Thomas 電子工業出版社

《Head First 設計模式》作者: 弗裡曼 譯者: O'Reilly Taiwan公司 中國電力出版社

《設計模式之禅》 作者: 秦小波 機械工業出版社

MSDN WebCast 《C#面向對象設計模式縱橫談》 講師:李建忠

劉偉. 設計模式. 北京:清華大學出版社, 2011.

劉偉. 設計模式實訓教程. 北京:清華大學出版社, 2012.

《大話設計模式》 作者: 程傑 清華大學出版社

《C#圖解教程》作者: 索利斯 譯者: 蘇林 / 朱晔 人民郵電出版社

《你必須知道的.NET》作者: 王濤

《項目中的.NET》作者: 李天平 電子工業出版社

《Microsoft .NET企業級應用架構設計》作者: (美)埃斯波西托等編著 譯者: 陳黎夫

繼續閱讀