解释器模式可能小众,只在一些特定的领域或情境下会被用到,比如编译器、规则引擎、正则表达式等。

一般的做法是,将语法规则拆分一些小的独立的单元,然后对每个单元进行解析,最终合并为对整个语法规则的解析。

应用设计模式主要是应对代码的复杂性,解释器模式也不例外。它的代码实现的核心思想,就是将语法解析的工作拆分到各个小类中,以此来避免大而全的解析类。

解释器模式的代码实现比较灵活,没有固定的模板。

要想了解“语言”要表达的信息,我们就必须定义相应的语法规则。这样,书写者就可以根据语法规则来书写“句子”(专业点的叫法应该是“表达式”),阅读者根据语法规则来阅读“句子”,这样才能做到信息的正确传递。而我们要讲的解释器模式,其实就是用来实现根据语法规则解读“句子”的解释器。

解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。

More
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 expressions = new List();expressions.Add(new TerminalExpression());expressions.Add(new TerminalExpression());expressions.Add(new NoneTerminalExpression());foreach (var expression in expressions){    expression.Interpret(context);}
Sample

Context: 解释器上下文
AbstractExpression: 解释表达式抽象,定义解释操作
ConcreteExpression: 解释表达式实现类,实现具体的解释逻辑

Prototype