网页制作的公司找时代创信凌哥seo技术博客
解释器模式:提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。
主要意图:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。
主要解决:对于一些固定文法构建一个解释句子的解释器。
解决方案:构建语法树,定义终结符与非终结符。
优点:
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; }}}
}