zoukankan      html  css  js  c++  java
  • 设计模式之解释器模式

    解释器模式 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

  • 相关阅读:
    Analysis Services features supported by SQL Server editions
    Azure DevOps to Azure AppServices
    Power BI For Competition
    Win10开机“提示语音”以及”随机播放音乐”
    Azure DevOps
    Allow Only Ajax Requests For An Action In ASP.NET Core
    Mobile CI/CD 101
    Configure SSL for SharePoint 2013
    AWS Step Function Serverless Applications
    Cordova Upload Images using File Transfer Plugin and .Net core WebAPI
  • 原文地址:https://www.cnblogs.com/weihanli/p/interpreter-pattern.html
Copyright © 2011-2022 走看看