直譯器模式(interpreter pattern)提供了評估語言的語法或表示式的方式,它屬於行為型模式。這種模式實現了乙個表示式介面,該介面解釋乙個特定的上下文。這種模式被用在 sql 解析.符號處理引擎等。
給定乙個語言,定義它的文法表示,並定義乙個直譯器,這個直譯器使用該標識來解釋語言中的句子。
對於一些固定文法構建乙個解釋句子的直譯器。
如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言中的句子。這樣就可以構建乙個直譯器,該直譯器通過解釋這些句子來解決該問題。
構建語法樹,定義終結符與非終結符。
構建環境類,包含直譯器之外的一些全域性資訊,一般是 hashmap。
編譯器.運算表示式計算。
可擴充套件性比較好,靈活。
增加了新的解釋表示式的方式。
易於實現簡單文法。
可利用場景比較少。
對於複雜的文法比較難維護。
直譯器模式會引起類膨脹。
直譯器模式採用遞迴呼叫方法。
可以將乙個需要解釋執行的語言中的句子表示為乙個抽象語法樹。
一些重複出現的問題可以用一種簡單的語言來進行表達。
乙個簡單語法需要解釋的場景。
用直譯器模式為公司安排一場面試
abstractmethoderror.js
export default class abstractmethoderror extends error
}
agecondition.js
import condition from "./condition";
export default class agecondition extends condition else ! 您年齡不滿足`);
return false;}}
}
andcondition.js
import condition from "./condition";
export default class andcondition extends condition
expression(user)
});if (pass) 恭喜您! 您很符合我們公司要求`);}}
}
condition.js
import abstractmethoderror from "./abstractmethoderror";
export default class condition
}
educondition.js
import condition from "./condition";
export default class educondition extends condition else ! 您學歷不滿足`);
return false;}}
}
測試demo:
import agecondition from "./src/agecondition";
import educondition from "./src/educondition";
import andcondition from "./src/andcondition";
export default ;
let user2 = ;
let user3 = ;
andcondition.expression(user1);
andcondition.expression(user2);
andcondition.expression(user3);
}};
參考:
設計模式之直譯器模式
直譯器模式是一種類行為型模式,它主要是用來解釋特定語言的特定文法表示,雖然這個在實際生產中不常用到,但是我們學習一下還是有幫助的。定義 給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。使用場景 當有乙個語言需要解釋執行,並且你可將該語言中的句子表示為乙...
設計模式之直譯器模式
直譯器模式 1.直譯器模式 給定乙個語言,定義它文法的一種表示,並定義乙個直譯器,這個直譯器使用該表示來解釋語言中的句子。如果一種特定型別的問題發生的頻率足夠高,那麼可能就值得將該問題的各個例項表述為乙個簡單語言中的句子。這樣就可以構建乙個直譯器,該直譯器通過解釋這些句子來解決該問題。比如 在字串中...
設計模式之直譯器模式
解析器模式是一種行為型設計模式。其思想是 給定乙個語言,定義它的文法的一種表示,並定義乙個直譯器,該直譯器使用該表示來解釋語言中的句子。解析器模式涉及4個角色 結構圖 於網路 下面提供乙個簡單例子。乙個簡易的控制台計算器,要求使用者輸入乙個表示式,如a b c,然後要求使用者輸入每個變數的具體值,如...