最后,我们定义上下文环境类:
代码语言:javascript复制public class Context {
private Map<String, Integer> variables = new HashMap<>();
public void assign(String variable, int value) {
variables.put(variable, value);
}
public int getValue(String variable) {
return variables.get(variable);
}
}
Context
类包含了一些变量信息,用于存储待解释的语言文法和全局信息。
下面是客户端的使用示例:
代码语言:javascript复制public class Client {
public static void main(String[] args) {
Context context = new Context();
Expression expr1 = new NumberExpression(10);
Expression expr2 = new NumberExpression(20);
context.assign("a", 10);
context.assign("b", 20);
Expression expr3 = new MultiplyExpression(new NumberExpression(2), new NumberExpression(3));
Expression expr4 = new AddExpression(new NumberExpression(5), new NumberExpression(10));
Expression expr5 = new SubtractExpression(expr2, expr1);
Expression expr6 = new DivideExpression(expr2, expr1);
System.out.println("a = " context.getValue("a"));
System.out.println("b = " context.getValue("b"));
System.out.println("2 * 3 = " expr3.interpret(context));
System.out.println("5 10 = " expr4.interpret(context));
System.out.println("20 - 10 = " expr5.interpret(context));
System.out.println("20 / 10 = " expr6.interpret(context));
}
}
输出结果:
代码语言:javascript复制a = 10
b = 20
2 * 3 = 6
5 10 = 15
20 - 10 = 10
20 / 10 = 2
以上就是解释器模式的一个简单示例。解释器模式可以很好地实现自定义语言的解释器,但是需要注意的是,当语言变得复杂时,解释器模式可能会变得难以维护,因此在使用时需要根据实际情况进行考虑。