# 解释器模式
属于行为型模式。
给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。
适用性:
- 如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。
- 当有一个语言需要解释执行,并且你可以将该语言中的句子表示为一个抽象语法树时,可以使用解释器模式。
- 易扩展,易于实现简单文法。
- 对于复杂的文法比较难维护和管理。当文法非常复杂时建议使用其他的技术(语法分析程序或编译生成器)
# 类图

# 代码
# 解释器
namespace BehavioralPatterns_InterpreterPattern | |
{ | |
/// <summary> | |
/// 抽象解释器 | |
/// </summary> | |
public abstract class Expression | |
{ | |
/// <summary> | |
/// 解释 | |
/// </summary> | |
/// <param name="content"></param> | |
public abstract void Interpret(ref string content); | |
} | |
} |
namespace BehavioralPatterns_InterpreterPattern | |
{ | |
/// <summary> | |
/// 终结符表达式 | |
/// 规定:';' 是终结符 | |
/// </summary> | |
public class TerminalExpression : Expression | |
{ | |
public override void Interpret(ref string content) | |
{ | |
content = content.Replace(';', ' '); | |
} | |
} | |
} |
namespace BehavioralPatterns_InterpreterPattern | |
{ | |
/// <summary> | |
/// 非终结符表达式 | |
/// </summary> | |
public class NonterminalExpression : Expression | |
{ | |
public override void Interpret(ref string content) | |
{ | |
content = content.ToUpper(); | |
} | |
} | |
} |
# 测试
namespace BehavioralPatterns_InterpreterPattern | |
{ | |
public class Program | |
{ | |
private static void Main() | |
{ | |
Expression terminalExpression = new TerminalExpression(); | |
Expression nonterminalExpression = new NonterminalExpression(); | |
string content = "a;b;c"; | |
terminalExpression.Interpret(ref content); | |
nonterminalExpression.Interpret(ref content); | |
Console.WriteLine(content); | |
} | |
} | |
} |
运行结果:
A B C