解释器模式(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 方式+内存分析>课程
四人帮<设计模式>