【设计模式】06-解释器模式

目录

 

什么是解释器模式

为什么要用解释器模式

解释器模式的组成

解释器模式的缺点


什么是解释器模式

解释器模式是为自定义语法解释的一种方案设计模式。

 

为什么要用解释器模式

当在项目中定义了特定的自定义语法表达式,并需要解析执行计算执行时,就可以考虑解释器模式。比如定义加减运算表达式,形如a+b+c,并传递相应的参数值,而对表达式进行解析,最终计算出结果。以a+b+c这个表达式为例,表达式分为两种,一是终结表达式即结果数字a,b,c。二是非终结表达式即这里的+号。

 

解释器模式的组成

抽象表达式

public abstract class Expression {

    //表达式解析方法,Context是上下文,里面可以存解析器必要的实际参数,可以是Map
    public abstract Object interpreter(Context ctx);
}

 


终结表达式

public class TerminalExpression extends Expression {

    @Override
    public Object interpreter(Context ctx) {

        return null;
    }
}

 


非终结表达式

public class NonterminalExpression extends Expression {


    public NonterminalExpression(Expression ... expressions) {
    }

    @Override
    public Object interpreter(Context ctx) {
        //处理关联多个具体的表达式
        return null;
    }
}

 


 

计算客户类

public class Client {

    private String expr;

    public Client(String expr) {
        this.expr = expr;
    }

    public void calc(Context ctx) {
        //对表达式存储
        Stack<Expression> stack = new Stack<>();

        char[] chars = expr.toCharArray();

        for (int i = 0; i < chars.length; i++) {
            //处理具体表达式 expr,并将翻译的表达式存储进stack
        }

        Expression exp = stack.pop();

        exp.interpreter(ctx);
    }
}

 

 

解释器模式的缺点

解释器的运行最终通过递归一层一层将非终结表达式递归到终结表达式,最后运算出结果,所以带来的问题是程序执行的效率会降低,并且给调试带来了困难。而且随着表达式的复杂,会带来对象的膨胀,对速度和内存损耗都是需要考虑的一个方面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值