设计模式探秘-24-解释器模式

解释器模式的学习与实践

模式定义

给定一门语言,定义其文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。

类图

  1. AbstraceExpression 抽象解释器 具体的解释任务由各个实现类完成,TerminalExpression和NonterminalExpression完成具体解释器
  2. TerminalExpression 终结符表达式 实现与文法中的元素相关联的解释操作,通常一个解释器模式中只有一个终结符表达式,但由多个实例,对应不同终结符。
  3. NonterminalExpression 非终结符表达式 文法中的每条规则对应于一个非终结表达式。
  4. Context 环境角色

解释器是一个比较少用的模式。

优点

解释器是简单语法分析工具,最显著的优点是扩展性,修改语法规则只要修改相应的非终结符表达式,若扩展语法,则只要增加非终结符类即可。

缺点

  1. 解释器模式会引起类膨胀
  2. 解释器模式采用递归调用方法
  3. 效率问题

使用场景

  1. 重复发生的问题可以使用解释器模式
  2. 一个简单语法需要解释的场景

注意事项

在重要模块尽量不要使用解释器模式,否则维护会比较麻烦。

扩展

实践

简单实现

参考资料

  1. 设计模式之禅
  2. GoF+23种设计模式解析