什麼是架構模式?java
根據維基百科中的定義:sql
架構模式是一個通用的、可重用的解決方案,用於在給定上下文中的軟件體系結構中常常出現的問題。架構模式與軟件設計模式相似,但具備更普遍的範圍。express
1、模式定義編程
解釋器模式用於設計一個解釋用專用語言編寫的程序的組件。它主要指定如何評估程序的行數,即以特定的語言編寫的句子或表達式。其基本思想是爲每種語言的符號都有一個分類。設計模式
2、模式結構架構
上圖是解釋器模式的UML結構圖編程語言
解釋器模式主要包含以下幾個角色:性能
3、代碼實現spa
class Context {} abstract class Expression { public abstract Object interpreter(Context ctx); } class TerminalExpression extends Expression { public Object interpreter(Context ctx){ return null; } } class NonterminalExpression extends Expression { public NonterminalExpression(Expression...expressions){ } public Object interpreter(Context ctx){ return null; } } public class Client { public static void main(String[] args){ String expression = ""; char[] charArray = expression.toCharArray(); Context ctx = new Context(); Stack<Expression> stack = new Stack<Expression>(); for(int i=0;i<charArray.length;i++){ //進行語法判斷,遞歸調用 } Expression exp = stack.pop(); exp.interpreter(ctx); } }
文法遞歸的代碼部分須要根據具體的狀況來實現,所以在代碼中沒有體現。抽象表達式是生成語法集合的關鍵,每一個非終結符表達式解釋一個最小的語法單元,而後經過遞歸的方式將這些語法單元組合成完整的文法,這就是解釋器模式。設計
4、優缺點
優勢:高度動態的行爲是可行的。對終端用戶編程性提供好處。提升靈活性,由於替換一個解釋程序很容易。
缺點:因爲解釋語言一般比編譯後的語言慢,所以性能多是一個問題。
5、使用場景
6、模式總結
注意事項
解釋器模式真的是一個比較少用的模式,由於對它的維護實在是太麻煩了,想象一下,一坨一坨的非終結符解釋器,假如不是事先對文法的規則瞭如指掌,或者是文法特別簡單,則很難讀懂它的邏輯。解釋器模式在實際的系統開發中使用的不多,由於他會引發效率、性能以及維護等問題。
一、在解釋器模式中因爲語法是由不少類表示的,因此可擴展性強。
二、雖然解釋器的可擴展性強,可是若是語法規則的數目太大的時候,該模式可能就會變得異常複雜。因此解釋器模式適用於文法較爲簡單的。
三、解釋器模式能夠處理腳本語言和編程語言。經常使用於解決某一特定類型的問題頻繁發生狀況。
PS:該博客因爲我理解有限,不少是查找相關資料,望諒解。。。