解释器模式是一种行为型设计模式,它定义了一种语言的文法,并且定义了一个解释器来解释这种语言中的语句。
在解释器模式中,我们定义了一个抽象的表达式类,它包含了一个解释方法,这个方法接收一个上下文对象作为参数,然后根据上下文对象中的信息来解释表达式。
具体的表达式类继承自抽象表达式类,实现了解释方法。在解释方法中,我们可以根据上下文对象中的信息来解释表达式,然后返回解释结果。
上下文对象包含了解释器需要的信息,它可以是一个简单的键值对,也可以是一个复杂的对象。在解释器模式中,我们可以通过修改上下文对象来改变解释器的行为。
下面是一个简单的解释器模式的示例代码:
// 抽象表达式类
abstract class Expression {
public abstract int interpret(Context context);
}
// 数字表达式类
class NumberExpression extends Expression {
private int number;
public NumberExpression(int number) {
this.number = number;
}
public int interpret(Context context) {
return number;
}
}
// 加法表达式类
class AddExpression extends Expression {
private Expression left;
private Expression right;
public AddExpression(Expression left, Expression right) {
this.left = left;
this.right = right;
}
public int interpret(Context context) {
return left.interpret(context) + right.interpret(context);
}
}
// 上下文类
class Context {
private Map<String, Integer> variables = new HashMap<>();
public void setVariable(String name, int value) {
variables.put(name, value);
}
public int getVariable(String name) {
return variables.get(name);
}
}
// 客户端代码
public class InterpreterDemo {
public static void main(String[] args) {
Context context = new Context();
context.setVariable("a", 10);
context.setVariable("b", 20);
Expression expression = new AddExpression(
new NumberExpression(context.getVariable("a")),
new NumberExpression(context.getVariable("b"))
);
int result = expression.interpret(context);
System.out.println(result);
}
}在上面的示例代码中,我们定义了一个抽象表达式类和两个具体的表达式类,分别表示数字和加法表达式。我们还定义了一个上下文类,它包含了一个变量表,用于存储变量的值。
在客户端代码中,我们创建了一个上下文对象,并设置了两个变量的值。然后我们创建了一个加法表达式,它包含了两个数字表达式。最后,我们调用加法表达式的解释方法,传入上下文对象,得到了加法表达式的结果。