设计模式之解释器模式

简介: 设计模式之解释器模式

解释器模式:提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。


主要意图:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。


主要解决:对于一些固定文法构建一个解释句子的解释器。


解决方案:构建语法树,定义终结符与非终结符。


优点:


1、可扩展性比较好,灵活。


2、增加了新的解释表达式的方式。


3、易于实现简单文法。


缺点:


1、可利用场景比较少。


2、对于复杂的文法比较难维护。


3、解释器模式会引起类膨胀。


4、解释器模式采用递归调用方法。


解释器类图:



代码实现:


客户端代码:

using System;
using System.Collections.Generic;
namespace _01解释器模式_结构图
{
    class Program
    {
        static void Main(string[] args)
        {
            Context context = new Context();
            IList<AbstractExpression> list = new List<AbstractExpression>();
            list.Add(new TerminalExpression());
            list.Add(new NonterminalExpression());
            list.Add(new TerminalExpression());
            list.Add(new TerminalExpression());
            foreach (AbstractExpression exp in list)
            {
                exp.Interpret(context);
            }
            Console.Read();
        }
    }
}


抽象解释器:

using System;
using System.Collections.Generic;
using System.Text;
namespace _01解释器模式_结构图
{
    abstract class AbstractExpression
    {
        public abstract void Interpret(Context context);
    }
}

终结符表达式:

using System;
using System.Collections.Generic;
using System.Text;
namespace _01解释器模式_结构图
{
    class TerminalExpression:AbstractExpression
    {
        public override void Interpret(Context context)
        {
            Console.WriteLine("终端解释器");
        }
    }
}

非终结符表达式:

using System;
using System.Collections.Generic;
using System.Text;
namespace _01解释器模式_结构图
{
    class NonterminalExpression:AbstractExpression
    {
        public override void Interpret(Context context)
        {
            Console.WriteLine("非终端解释器");
        }
    }
}

环境角色:

using System;
using System.Collections.Generic;
using System.Text;
namespace _01解释器模式_结构图
{
    class Context
    {
        private string input;
        public string Input
        {
            get { return input; }
            set { input = value; }
        }
        private string output;
        public string Output
        {
            get { return output; }
            set { output = value; }
        }
    }
}
相关文章
|
设计模式 移动开发 数据库
行为型设计模式10-解释器模式
行为型设计模式10-解释器模式
102 1
|
3月前
|
设计模式 存储 缓存
Java设计模式 - 解释器模式(24)
Java设计模式 - 解释器模式(24)
|
7月前
|
设计模式 SQL Java
【设计模式】抖音一面:你不知道解释器模式?
【设计模式】抖音一面:你不知道解释器模式?
56 1
|
7月前
|
设计模式 Go
[设计模式 Go实现] 行为型~解释器模式
[设计模式 Go实现] 行为型~解释器模式
|
7月前
|
设计模式 存储 Java
小谈设计模式(28)—解释器模式
小谈设计模式(28)—解释器模式
|
7月前
|
设计模式 存储 Java
23种设计模式,解释器模式的概念优缺点以及JAVA代码举例
【4月更文挑战第7天】解释器模式是一种行为设计模式,它用于定义一个语言的语法表示,并提供一个解释器来处理这种语法。主要用于频繁需要解释执行一组固定语法规则的场景,例如编程语言解释器、规则引擎等。
50 3
|
7月前
|
设计模式 存储 SQL
【设计模式系列笔记】解释器模式
解释器模式(Interpreter Pattern)是一种行为型设计模式,它定义了一种语言的文法,并且建立一个解释器来解释该语言中的句子。在Java中,解释器模式通常用于实现编程语言解释器、正则表达式解释器等。
78 0
|
7月前
|
设计模式
【设计模式】解释器模式
【设计模式】解释器模式
|
7月前
|
设计模式 监控 Java
聊聊Java设计模式-解释器模式
解释器模式(Interpreter Design Pattern)指给定一个“语言”,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。这里所指的“语言”是指使用规定格式和语法的代码。
88 4
聊聊Java设计模式-解释器模式
|
7月前
|
设计模式 Go 开发工具
Golang设计模式——18解释器模式
Golang设计模式——18解释器模式
52 0
Golang设计模式——18解释器模式