解释器模式提供了一个解释器接口,用于解释特定的语法或表达式,使程序能够动态更改解释规则。它可以应用于各种场景,例如数学表达式求值,其中可以动态地改变表达式的语法或顺序以获得不同的结果。

Java 设计模式:解释器模式
简介
解释器模式定义了一个用来解释语言或表达的 interpreter。它允许我们构建可以动态改变解释的语法或表达式的程序。
立即学习“Java免费学习笔记(深入)”;
要点
- Interpreter(解释器):解释特定语言或表达式的接口。
- TerminalExpression(终结符表达式):表示文法中单个符号或不可分割的单位。
- NonTerminalExpression(非终结符表达式):表示文法中包含其他表达式的复杂表达式。
- Context(上下文):存储解释器执行期间的状态和数据。
实战案例:数学表达式求值
假设我们有如下数学表达式:
1 + 2 * 3
我们可以使用解释器模式来求值这个表达式:
// TerminalExpression 类
public class NumberExpression implements Expression {
private int number;
public NumberExpression(int number) {
this.number = number;
}
@Override
public int interpret(Context context) {
return number;
}
}
// TerminalExpression 类
public class PlusExpression implements Expression {
private Expression left;
private Expression right;
public PlusExpression(Expression left, Expression right) {
this.left = left;
this.right = right;
}
@Override
public int interpret(Context context) {
return left.interpret(context) + right.interpret(context);
}
}
// TerminalExpression 类
public class MultiplyExpression implements Expression {
private Expression left;
private Expression right;
public MultiplyExpression(Expression left, Expression right) {
this.left = left;
this.right = right;
}
@Override
public int interpret(Context context) {
return left.interpret(context) * right.interpret(context);
}
}
// Context 类
public class Context {
private Expression expression;
public Context(Expression expression) {
this.expression = expression;
}
public int evaluate() {
return expression.interpret(this);
}
}
// 客户端代码
public class Main {
public static void main(String[] args) {
Expression expression = new PlusExpression(
new NumberExpression(1),
new MultiplyExpression(
new NumberExpression(2),
new NumberExpression(3)
)
);
Context context = new Context(expression);
int result = context.evaluate();
System.out.println(result); // 输出: 7
}
}











