解釋器模式

解釋器模式

解釋器模式(Interpreter Pattern):定義一個語言的文法,而且創建一個解釋器來解釋該語言中的句子,這裏的「語言」是指使用規定格式和語法的代碼。解釋器模式是一種類行爲型模式
示例1
  • Context;包含解釋器以外的一些全局信息
public class Context {
    private String before;
    private String after;

    public String getBefore() {
        return before;
    }

    public void setBefore(String before) {
        this.before = before;
    }

    public String getAfter() {
        return after;
    }

    public void setAfter(String after) {
        this.after = after;
    }
}
  • AbstractExpression:抽象解釋器
public abstract class AbstractExpression {
    abstract void Interpret(Context context);
}
  • TerminalExpression: 爲終結符表達式, 實現與文法中的終結符相關的解釋操做
public class TerminalExpression extends AbstractExpression {
    @Override
    void Interpret(Context context) {
        String before = context.getBefore();
        context.setAfter("被終端處理後:" + before);
        System.out.println(context.getAfter());
    }
}
  • NonTermialExpression: 爲非終結符表達式,爲文法中的非終結符實現解釋操做
public class NonterminalExpression extends AbstractExpression {
    @Override
    void Interpret(Context context) {
        String before = context.getBefore();
        context.setAfter("被非終端處理後:" + before);
        System.out.println(context.getAfter());
    }
}
  • 測試類
public class Interpreter01Test {
    public static void main(String[] args) {
        Context context = new Context();
        context.setBefore("test");

        TerminalExpression terminalExpression = new TerminalExpression();
        terminalExpression.Interpret(context);

        NonterminalExpression nonterminalExpression = new NonterminalExpression();
        nonterminalExpression.Interpret(context);

        /**
         * 被終端處理後:test
         * 被非終端處理後:test
         */

    }
}
總結
  • 優勢java

    • 當有一個語言須要解釋執行,可將該語言中的句子表示爲一個抽象語法樹,就能夠考慮使用解釋器模式,讓程序具備良好的擴展性
    • 增長新的解釋表達式較爲方便
  • 缺點正則表達式

    • 對於複雜文法難以維護。在解釋器模式中,每一條規則至少須要定義一個類,所以若是一個語言包含太多文法規則,類的個數將會急劇增長,致使系統難以管理和維護
    • 執行效率低
  • 適用場景ide

    • 能夠將一個須要解釋執行的語言中的句子表示爲一個抽象語法樹
  • 應用場景測試

    • 編譯器
    • 運算表達式計算
    • 正則表達式
    • 機器人
相關文章
相關標籤/搜索