天天看点

设计模式-解释器模式(Interpreter)解释器模式(Interpreter)适用场景优点缺点模式角色代码实现

解释器模式(Interpreter)

  • 定义 : 给定一个语言, 定义它的文法的一种表示, 并定义一个解释器, 这个解释器使用该表示来解释语言中的句子
  • 为了解释一种语言, 而为语言创建的解释器
  • 类型 : 行为型

适用场景

  • 某个特定类型问题发生频率足够高

优点

  • 语法由很多类表示, 容易改变及扩展此"语言"

缺点

  • 当语法规则数目太多时, 增加了系统复杂度

模式角色

  • AbstractExpression (抽象表达式 ) : 声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享。
  • TerminalExpression (终结符表达式) :
    • 实现与文法中的终结符相 关联的解释操作。
    • 一个句子中的每个终结符需要该类的一个实例。
  • NonterminalExpression (非终结符表达式) :
    • 对文法中的每一条规则R ::= R1 R1 . . . Rn 都需要一个NonterminalExpression 类。

      为从R1到Rn的每个符号都维护一个AbstractExpression类型的实例变量。

      为文法中的非终结符实现解释 ( Interpret)操作。解释(Interpret)一般要递归地调用表示R1到Rn的那些对象的解释操作。

  • Context(上下文): 包含解释器之外的一些全局信息。
  • Client (客户):
    • 构建(或被给定) 表示该文法定义的语言中一个特定的句子的抽象语法树。该抽象语

      法树由NonterminalExpression 和TerminalExpression的实例装配而成。

    • 调用解释操作。

代码实现

  • 实际开发中需要使用解释器模式的地方很少, 这里就不手动实现了, 就以JDK的Pattern类来说明一下即可
  • Pattern类可以认为是解释器模式的一种实现, 它实现对正则表达式的解析
  • 如对$符合的解析可以认为是TerminalExpression解释器

本文参考:

慕课网<java设计模式精讲 Debug 方式+内存分析>课程

四人帮<设计模式>

继续阅读