
用法
口译员模式(口译员)
定义一种语言设计模式 解释器模式设计模式 解释器模式,代表其语法. 并定义一个解释器,使用该表示法来解释语言中的句子.
解释器模式是一种行为模式.

结构
图片翻译模式
上下文: 包含解释器之外的一些全局信息.
class Context {
private String input;
private String output;
public void setInput(String input) {
this.input = input;
}
public String getInput() {
return this.input;
}
public void setOutput(String output) {
this.output = output;
}
public String getOutput() {
return this.output;
}
}

AbstractExpression: 声明抽象解释操作. 该接口由抽象语法树中的所有节点共享.
abstract class AbstractExpression {
public abstract void Interpret(Context context);
}
TerminalExpression: 实现与语法中的终端关联的解释操作. 实现抽象表达式所需的接口主要是Interprete()方法. 语法中的每个终端符号都有一个与之相对应的特定终端表达式.
class TerminalExpression extends AbstractExpression {
@Override
public void Interpret(Context context) {
context.setOutput("终端" + context.getInput());
System.out.println(context.getInput() + "经过终端解释器解释为:" + context.getOutput());
}
}

NonterminalExpression: 实现与语法中的非终结符相关的解释操作. 对于语法中的每个规则R1,R2 ... Rn,都需要特定的非终止表达式类. 解释方法由实现抽象表达式的解释方法实现.
class NonterminalExpression extends AbstractExpression {
@Override
public void Interpret(Context context) {
context.setOutput("非终端" + context.getInput());
System.out.println(context.getInput() + "经过非终端解释器解释为:" + context.getOutput());
}
}
测试代码
public class InterpreterPattern {
public static void main(String[] args) {
Context context = new Context();
context.setInput("ABC");
AbstractExpression expression1 = new TerminalExpression();
expression1.Interpret(context);
AbstractExpression expression2 = new NonterminalExpression();
expression2.Interpret(context);
}
}

运行结果
ABC经过终端解释器解释为:终端ABC ABC经过非终端解释器解释为:非终端ABC
推荐
本文属于JAVA设计模式系列.
参考
“大华设计模式”和“ HeadFirst设计模式”
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-281035-1.html
一如当年的航空识别区
伊国的安全谁保证