解释器模式是一种行为型设计模式,它定义了一种语言的文法,并且定义了一个解释器来解释这种语言中的语句。
在解释器模式中,我们定义了一个抽象的表达式类,它包含了一个解释方法,这个方法接收一个上下文对象作为参数,然后根据上下文对象中的信息来解释表达式。
具体的表达式类继承自抽象表达式类,实现了解释方法。在解释方法中,我们可以根据上下文对象中的信息来解释表达式,然后返回解释结果。
上下文对象包含了解释器需要的信息,它可以是一个简单的键值对,也可以是一个复杂的对象。在解释器模式中,我们可以通过修改上下文对象来改变解释器的行为。
下面是一个简单的解释器模式的示例代码:
// 抽象表达式类 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); } }
在上面的示例代码中,我们定义了一个抽象表达式类和两个具体的表达式类,分别表示数字和加法表达式。我们还定义了一个上下文类,它包含了一个变量表,用于存储变量的值。
在客户端代码中,我们创建了一个上下文对象,并设置了两个变量的值。然后我们创建了一个加法表达式,它包含了两个数字表达式。最后,我们调用加法表达式的解释方法,传入上下文对象,得到了加法表达式的结果。