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