设计模式-解释器模式示例(二)

2023-05-04 15:18:43 浏览数 (1)

最后,我们定义上下文环境类:

代码语言: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

以上就是解释器模式的一个简单示例。解释器模式可以很好地实现自定义语言的解释器,但是需要注意的是,当语言变得复杂时,解释器模式可能会变得难以维护,因此在使用时需要根据实际情况进行考虑。

0 人点赞