解釋器模式/Interpret
意圖/適用場景:
給定一個語言,定義它的文法的一種表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。
解釋器模式並不是一種應用很廣泛的模式,因爲它特別適合用來解釋語言,而在一般的軟件系統中,內嵌一種語方的成本顯然太高。但這種模式的出發點值得借鑑:如果一種特定類型的問題發生的頻率足夠高, 那麼可能就值得將該問題的各個實例表述爲一個簡單語言中的句子。這樣就可以構建一個解釋器, 該解釋器通過解釋這些句子來解決該問題。
UML:
無
要點:
當有一個語言需要解釋執行, 並且你可將該語言中的句子表示爲一個抽象語法樹時,可使用解釋器模式。而當存在以下情況時該模式效果最好:
- 該語言文法簡單。對於複雜的文法, 文法的類層次變得龐大而無法管理。此時語法分析程序生成器這樣的工具是更好的選擇。它們無需構建抽象語法樹即可解釋表達式, 這樣可以節省空間而且還可能節省時間。
- 效率不是一個關鍵問題。最高效的解釋器通常不是通過直接解釋語法分析樹實現的, 而是首先將它們轉換成另一種形式。例如,正則表達式通常被轉換成狀態機。但即使在這種情況下, 轉換器仍可用解釋器模式實現, 該模式仍是有用的。
應用實例:
正則表達式引擎是一個很好的例子。
搜索匹配一個模式的字符串是一個常見問題。正則表達式是描述字符串模式的一種標準語言。與其爲每一個的模式都構造一個特定的算法,不如使用一種通用的搜索算法來解釋執行一個正則表達式,該正則表達式定義了待匹配字符串的集合。
示例代碼:
無