架構模式——解釋器模式

什麼是架構模式?java

根據維基百科中的定義:sql

架構模式是一個通用的、可重用的解決方案,用於在給定上下文中的軟件體系結構中常常出現的問題。架構模式與軟件設計模式相似,但具備更普遍的範圍。express

 

1、模式定義編程

解釋器模式用於設計一個解釋用專用語言編寫的程序的組件。它主要指定如何評估程序的行數,即以特定的語言編寫的句子或表達式。其基本思想是爲每種語言的符號都有一個分類。設計模式

 

2、模式結構架構

上圖是解釋器模式的UML結構圖編程語言

解釋器模式主要包含以下幾個角色:性能

  • AbstractExpression: 抽象表達式。聲明一個抽象的解釋操做,該接口爲抽象語法樹中全部的節點共享。
  • TerminalExpression: 終結符表達式。實現與文法中的終結符相關的解釋操做。實現抽象表達式中所要求的方法。文法中每個終結符都有一個具體的終結表達式與之相對應。
  • NonterminalExpression: 非終結符表達式。爲文法中的非終結符相關的解釋操做。
  • Context: 環境類。包含解釋器以外的一些全局信息。
  • Client: 客戶類。

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、使用場景

  • 有一個簡單的語法規則,好比一個sql語句,若是咱們須要根據sql語句進行rm轉換,就可使用解釋器模式來對語句進行解釋。
  • 一些重複發生的問題,好比加減乘除四則運算,可是公式每次都不一樣,有時是a+b-c*d,有時是a*b+c-d,等等等等個,公式變幻無窮,可是都是由加減乘除四個非終結符來鏈接的,這時咱們就可使用解釋器模式。

6、模式總結

  注意事項

  解釋器模式真的是一個比較少用的模式,由於對它的維護實在是太麻煩了,想象一下,一坨一坨的非終結符解釋器,假如不是事先對文法的規則瞭如指掌,或者是文法特別簡單,則很難讀懂它的邏輯。解釋器模式在實際的系統開發中使用的不多,由於他會引發效率、性能以及維護等問題。

 

一、在解釋器模式中因爲語法是由不少類表示的,因此可擴展性強。

二、雖然解釋器的可擴展性強,可是若是語法規則的數目太大的時候,該模式可能就會變得異常複雜。因此解釋器模式適用於文法較爲簡單的。

三、解釋器模式能夠處理腳本語言和編程語言。經常使用於解決某一特定類型的問題頻繁發生狀況。

 

PS:該博客因爲我理解有限,不少是查找相關資料,望諒解。。。

相關文章
相關標籤/搜索