天天看點

Java描述設計模式(14):解釋器模式

本文源碼:GitHub·點這裡 || GitEE·點這裡

解釋器模式是對象的行為模式。給定一個語言之後,解釋器模式可以定義出其文法的一種表示,并同時提供一個解釋器。用戶端可以使用這個解釋器來解釋這個語言中的表達式。
Java描述設計模式(14):解釋器模式

(1)、抽象表達式

Express:聲明具體表達式角色需要實作的抽象接口,該接口主要提供一個interpret()方法,稱做解釋操作。

(2)、終結符表達式

TerminalExpress:實作抽象表達式角色接口,主要是一個interpret()方法;每個終結符都有一個具體終結表達式與之相對應。比如解析c=a+b,a和b是終結符,解析a和b的解釋器就是終結符表達式。

(3)、非終結符表達式

NotTerminalExpress:每一條規則都需要一個具體的非終結符表達式用來銜接,一般是指運算符或者邏輯判斷,比如c=a+b,“+"就是非終結符,解析“+”的解釋器就是一個非終結符表達式。

(4)、環境容器

DataMap:一般是用來存放各個終結符所對應的具體值,比如c=a+b轉換為c=1+2。這些資訊需要一個存放環境。

類圖結構

Java描述設計模式(14):解釋器模式

源碼實作

(1)Expression結構

表達式接口:具有不同的實作類。

核心方法:

(2)SpelExpressionParser結構

(3)ExpressionParser接口

(4)Expression擷取

根據不同的條件擷取不同的Expression對象。這裡産生類的依賴關系。

源碼位置:TemplateAwareExpressionParser

場景

編譯器、運算符表達式、正規表達式、機器人等。

優點

當有一個表達式或者語言需要解釋執行,該場景下的内容可以考慮使用解釋器模式,使程式具有良好的擴充性。

缺點

解釋器模式會引起類膨脹,會導緻程式執行和調試非常複雜,不容易了解。
Java描述設計模式(14):解釋器模式

繼續閱讀