設計模式之解釋器模式


解釋器模式 Interpreter

Intro

解釋器模式,給定一個語言,定義它的文法的一種表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。

這和解釋型編程語言的解釋器有點類似,要根據一段輸入轉換成一段輸出,將不易讀的文本轉換為易讀的文本,將機器不能識別的輸入轉成二進制機器可讀的輸出

當有一個語言需要解釋執行,並且你可以將該語言中的句子表示為一個抽象語法樹時,可以使用解釋器模式。

Prototype

  • Context: 解釋器上下文
  • AbstractExpression: 解釋表達式抽象,定義解釋操作
  • ConcreteExpression: 解釋表達式實現類,實現具體的解釋邏輯

Sample

public class Context
{
    public string Input { get; set; }
    public string Output { get; set; }
}

public abstract class AbstractExpression
{
    public abstract void Interpret(Context context);
}
public class TerminalExpression : AbstractExpression
{
    public override void Interpret(Context context)
    {
        Console.WriteLine("TerminalExpressionInterpreter");
    }
}
public class NoneTerminalExpression : AbstractExpression
{
    public override void Interpret(Context context)
    {
        Console.WriteLine("NonTerminalExpressionInterpreter");
    }
}


var context = new Context();
ICollection<AbstractExpression> expressions = new List<AbstractExpression>();

expressions.Add(new TerminalExpression());
expressions.Add(new TerminalExpression());
expressions.Add(new NoneTerminalExpression());

foreach (var expression in expressions)
{
    expression.Interpret(context);
}

More

解釋器模式為某個語言定義它的語法(或者叫文法)表示,並定義一個解釋器用來處理這個語法。

要想了解“語言”要表達的信息,我們就必須定義相應的語法規則。這樣,書寫者就可以根據語法規則來書寫“句子”(專業點的叫法應該是“表達式”),閱讀者根據語法規則來閱讀“句子”,這樣才能做到信息的正確傳遞。而我們要講的解釋器模式,其實就是用來實現根據語法規則解讀“句子”的解釋器。

解釋器模式的代碼實現比較靈活,沒有固定的模板。

應用設計模式主要是應對代碼的復雜性,解釋器模式也不例外。它的代碼實現的核心思想,就是將語法解析的工作拆分到各個小類中,以此來避免大而全的解析類。

一般的做法是,將語法規則拆分一些小的獨立的單元,然后對每個單元進行解析,最終合並為對整個語法規則的解析。

解釋器模式可能小眾,只在一些特定的領域或情境下會被用到,比如編譯器、規則引擎、正則表達式等。

Reference


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM