直譯器模式是一種行為型模式,它提供乙個解析特定語法規則的直譯器。
看例子,這裡有乙個由「+ - 9 8 7」組成的表示式樹:
直譯器模式的類圖:
由圖我們可以看到直譯器模式包含以下幾個角色:
下面是**演示簡單的四則運算(因原文使用的是string來表現context,個人感覺不太直觀,體現不出context的作用,因此引用了另一篇博文的例子——設計模式(行為型)之直譯器模式(interpreter pattern)),首先是表示式族:
// 抽象表示式
public
inte***ce
expression
// 終結符表示式
public
class
variable
implements
expression
}// 字面量值使用該表示式儲存
public
class
constant
implements
expression
@override
public
intinterpret
(context context)
}// 非終結符表示式
// 加法解析器
public
class
addexpression
implements
expression
@override
public
intinterpret
(context context)
}// 減法解析器
public
class
subexpression
implements
expression
@override
public
intinterpret
(context context)
}// 乘法解析器
public
class
mulexpression
implements
expression
@override
public
intinterpret
(context context)
}// 除法解析器
public
class
devexpression
implements
expression
@override
public
intinterpret
(context context)
}
然後是context類:
public
class
context
// 通過表示式物件獲取對應的值
public integer getvalue
(variable x)
}
客戶端測試:
public
static
void
main
(string[
] args)
通過上面的例子我們可以發現直譯器模式的優點如下:
直譯器模式的缺點也很明顯:
設計模式之禪
設計模式之禪 大話面向初學者 禪面向有了一定基礎後提公升能力的讀者 看大話,只是看故事,只是感性認識,對於很多初學者而又沒專案經驗 或 閱讀 編寫量 的人來說,比較適合用於入門 看禪 主要是有一定的專案經驗 或 閱讀 編寫量 基礎上,而又大致閱讀過23種設計模式中的20種以上基本概念後,再深化提公升...
設計模式之直譯器模式
直譯器模式是一種類行為型模式,它主要是用來解釋特定語言的特定文法表示,雖然這個在實際生產中不常用到,但是我們學習一下還是有幫助的。定義 給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。使用場景 當有乙個語言需要解釋執行,並且你可將該語言中的句子表示為乙...
設計模式之直譯器模式
直譯器模式 1.直譯器模式 給定乙個語言,定義它文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言中的句子。這樣就可以構建乙個直譯器,該直譯器通過解釋這些句子來解決該問題。比如 在字串中...