設計之禪 直譯器模式(譯文)

2021-09-10 18:54:21 字數 1826 閱讀 1244

直譯器模式是一種行為型模式,它提供乙個解析特定語法規則的直譯器。

看例子,這裡有乙個由「+ - 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.直譯器模式 給定乙個語言,定義它文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言中的句子。這樣就可以構建乙個直譯器,該直譯器通過解釋這些句子來解決該問題。比如 在字串中...