Java學習 設計模式 直譯器模式

2021-09-12 17:23:04 字數 2024 閱讀 7680

直譯器模式提供了評估語言的語法或表示式的方式,它屬於行為型模式。這種模式實現了乙個表示式介面,該介面解釋乙個特定的上下文。這種模式被用在 sql 解析、符號處理引擎等。

優點:1、可擴充套件性比較好,靈活。 2、增加了新的解釋表示式的方式。 3、易於實現簡單文法。

缺點:1、可利用場景比較少。 2、對於複雜的文法比較難維護。 3、直譯器模式會引起類膨脹。 4、直譯器模式採用遞迴呼叫方法。

使用場景:1、可以將乙個需要解釋執行的語言中的句子表示為乙個抽象語法樹。 2、一些重複出現的問題可以用一種簡單的語言來進行表達。 3、乙個簡單語法需要解釋的場景。

**何時使用:**如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言中的句子。這樣就可以構建乙個直譯器,該直譯器通過解釋這些句子來解決該問題。

這個想了很久(也不是很久,就是每天下班回來看一下,看了兩三晚),但是呢不知道自己的理解正不正確。

就是對你所輸入的語言進行解釋,比如說你輸入乙個計算公式簡單的加減乘除,這個你輸入到電腦的是字串,程式執行時將你輸入的字串解析出來,變成數學公式計算出來。

還比如說,乙個判斷類容,你輸入籃子裡有蘋果或者香蕉嗎?程式對其進行解析,並返回對應的結果給你。

以籃子中的水果舉例

1. 首先建立乙個水果介面 a,包含乙個判定方法

2. 再建立乙個實現類 a1 實現這個介面,包含乙個水果名的屬性並在構造方法中初始化它,然後重寫判定方法,判斷輸入語句有沒有涉及到這個水果

3.再建立乙個and類 b1 也實現水果介面,包含兩個上面實現類的屬性,並在構造方法中初始化好,重寫判定方法,判斷兩種水果是否同時存在

4. 還可以再建立乙個or類,按照and類編寫,只是判斷是否存在其中乙個

5. 初始化好這兩個水果類,使用or方法判斷籃子裡是否存在兩種水果

package practices.mode.interpreter_pattern;

// 1. 先定義乙個水果的介面

public

inte***ce

fruit

package practices.mode.interpreter_pattern;

// 2. 建立實現類來實現水果介面,變成具體的水果

public

class

realfruit

implements

fruit

public

boolean

exist_fruit

(string question)

return

false;}

}

package practices.mode.interpreter_pattern;

// 3. 比較是否同時存在

public

class

and_copmare

public

void

compare

(string sentence)

else

}}

package practices.mode.interpreter_pattern;

// 4. 比較是否存在其中一種

public

class

or_compare

public

void

compare

(string sentence)

else

}}

package practices.mode.interpreter_pattern;

// 5. 測試

public

class

test_main

if(sentence.

contains

("或"))

}}

JAVA設計模式 直譯器模式

直譯器模式 給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。如果乙個特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言的句子。這樣就可以構建乙個直譯器,該直譯器通過解釋這些句子來解決該問題。使用 當有乙個語言需要解釋執行...

Java設計模式之直譯器模式

直譯器模式用於描述如何構成乙個簡單的語言直譯器,主要應用於使用物件導向語言開發的直譯器的設計。當需要開發乙個新的語言時可以考慮使用直譯器模式。在某些情況下,為了更好地描述某些特定型別的問題可以建立一種新的語言,這種語言擁有自己的表示式和結構,即文法規則,這些問題的例項將對應為該語言中的句子,此時可以...

Java設計模式之直譯器模式

定義 一種語法分析工具,用來分步解釋乙個複雜的運算過程,複雜運算拆分成多個小運算。需求 計算 1 2 3 4 的值。必備元素 建立直譯器介面,裡面包含乙個解釋操作的方法 public inte ce expression 建立終結符表示式,裡面計算加法 public class terminalex...