26 Interpreter解释器模式(行为型)
26 Interpreter(行为型)
-
- 动机:
- 给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。
- 什么时候用:
- 当需要解释一种语言时,可以使用解释器模式,并且可以将该语言中的语句表示为抽象语法树。
- 当语法简单时,解释器模式最有效。语法结构不能太复杂
- 效率不是一个关键问题。最有效的解释器通常不是通过直接解释解析树实现的,而是首先将它们转换成另一种形式。
- 结构:
- 参与者:
-
- 协作:
- 客户端将句子构建为一个包含非终结表达式和终结表达式实例的抽象语法树。然后客户端初始化上下文并调用explain操作。
- 每个非终止表达式节点根据子表达式上的explain定义explain。每个TerminalExpression的解释操作定义了递归中的基本情况。
- 每个节点上的解释操作使用上下文来存储和访问解释器的状态。
-
- 后果:
- 语法很容易实现。
- 改变和扩展语法很容易。
- 因为模式使用类来表示语法规则。
- 复杂的语法很难维护。
- 例:
- 语法树:
- 类图:
- Node:
- ProgramNode:
- 仅仅过滤掉program
- CommandListNode:
- CommandNode:
- RepeatCommandNode:
- PrimitiveCommandNode:
- 后果: