天天看點

設計模式-解釋器模式(Interpreter)解釋器模式(Interpreter)适用場景優點缺點模式角色代碼實作

解釋器模式(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 方式+記憶體分析>課程

四人幫<設計模式>

繼續閱讀