前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式-解释器模式示例(二)

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

原创
作者头像
堕落飞鸟
发布2023-05-04 15:18:43
1110
发布2023-05-04 15:18:43
举报
文章被收录于专栏:飞鸟的专栏飞鸟的专栏

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

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档