解釋器模式(Interpreter)
- 定義 : 給定一個語言, 定義它的文法的一種表示, 并定義一個解釋器, 這個解釋器使用該表示來解釋語言中的句子
- 為了解釋一種語言, 而為語言建立的解釋器
- 類型 : 行為型
适用場景
- 某個特定類型問題發生頻率足夠高
優點
- 文法由很多類表示, 容易改變及擴充此"語言"
缺點
- 當文法規則數目太多時, 增加了系統複雜度
模式角色
- AbstractExpression (抽象表達式 ) : 聲明一個抽象的解釋操作,這個接口為抽象文法樹中所有的節點所共享。
- TerminalExpression (終結符表達式) :
- 實作與文法中的終結符相 關聯的解釋操作。
- 一個句子中的每個終結符需要該類的一個執行個體。
- NonterminalExpression (非終結符表達式) :
-
對文法中的每一條規則R ::= R1 R1 . . . Rn 都需要一個NonterminalExpression 類。
為從R1到Rn的每個符号都維護一個AbstractExpression類型的執行個體變量。
為文法中的非終結符實作解釋 ( Interpret)操作。解釋(Interpret)一般要遞歸地調用表示R1到Rn的那些對象的解釋操作。
-
- Context(上下文): 包含解釋器之外的一些全局資訊。
- Client (客戶):
-
建構(或被給定) 表示該文法定義的語言中一個特定的句子的抽象文法樹。該抽象語
法樹由NonterminalExpression 和TerminalExpression的執行個體裝配而成。
- 調用解釋操作。
-
代碼實作
- 實際開發中需要使用解釋器模式的地方很少, 這裡就不手動實作了, 就以JDK的Pattern類來說明一下即可
- Pattern類可以認為是解釋器模式的一種實作, 它實作對正規表達式的解析
- 如對$符合的解析可以認為是TerminalExpression解釋器
本文參考:
慕課網<java設計模式精講 Debug 方式+記憶體分析>課程
四人幫<設計模式>