這種型別的設計模式屬於行為型模式,它他解決了方法的合理呼叫
直譯器模式用於對表示式(字串的解析),如espl 正規表示式等
可以通過自定義規則來使用直譯器建立一種語法簡易**(如espl)
直譯器需要的角色:
解析器類 : 用來制定規則按情況呼叫不同的表示式類完成解析
抽象表示式類 : 在此類生成結果
具體表示式 類: 通過不同的抽象表示式子類解析不同的符號並運算
終結符表示式類 : 將解析號的符號 進行賦值轉換
由於解析器是遞迴呼叫的 在棧底的符號需要轉換成數值(或語句)進行處理 終結符類 就擔任此功能
使用者將指定格式的表示式傳入解析器類即可
public
abstract
class
abstractexpression
//終結符表示式類 與具體表示式繼承同乙個介面 共享map
public
class
varexpression
extends
abstractexpression
//將符號與值進行轉換
@override
public
intinterpreter
(hashmap
var)
}
//加法減法具體實現類 (抽取了乙個父類)
public
class
symbolexpression
extends
abstractexpression
//他也是抽象的並不實現這個方法
@override
public
intinterpreter
(hashmap
var)
}//加法具體類
public
class
addexception
extends
symbolexpression
@override
public
intinterpreter
(hashmap
var)
}//減法具體類
public
class
subexpression
extends
symbolexpression
//由left和right決定他的具體實現是什麼(是varexpression還是******expression)
@override
public
intinterpreter
(hashmap
var)
}
//解析器類 有解析器制定規則來呼叫各種表示式類
public
class
calculator
}this
.expression = stack.
pop();
parse
(expstr);}
private
void
parse
(string expstr)
throws ioexception }}
}public
intrun()
}
//使用者類
public
class
user
}
設計模式系列 直譯器模式
直譯器模式,給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。在直譯器模式中由於語法是由很多類表示的,當語法規則更改時,只需修改相應的非終結符表示式即可 若擴充套件語法時,只需新增相應非終結符類即可。特徵 為了解釋一種語言,而為語言建立的直譯器。給出乙個...
PHP設計模式系列 直譯器模式
直譯器模式 用於分析乙個實體的關鍵元素,並且針對每個元素提供自己的解釋或相應動作。直譯器模式非常常用,比如php的模板引擎 就是非常常見的一種直譯器模。直譯器模式 用於分析乙個實體的關鍵元素,並且針對每個元素提供自己的解釋或相應動作 直譯器模式非常常用,比如php的模板引擎 就是非常常見的一種直譯器...
設計模式之直譯器模式
直譯器模式是一種類行為型模式,它主要是用來解釋特定語言的特定文法表示,雖然這個在實際生產中不常用到,但是我們學習一下還是有幫助的。定義 給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。使用場景 當有乙個語言需要解釋執行,並且你可將該語言中的句子表示為乙...