您当前的位置: 首页 > 

命运之手

暂无认证

  • 3浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【设计模式】【24】解释器模式

命运之手 发布时间:2022-05-02 17:35:57 ,浏览量:3

应用场景

解释器模式,英文名Interpreter Pattern

这是一个比较专业的模式,它专门用于公式解析或语法解析类的问题

该模式通过一个专门的解释器类,根据用于输入的表达式和参数,来计算出运算结果

该模式并没有固定形式,解释器如何实现完全取决于实际问题

但大多公式和语法类问题,解决方法都会涉及递归运算、栈、二叉树等知识

实现代码

这里以加减法为例,实现一个最简单的公式解释器


	//数学表达式
	//一个总的表达式,可以视为若干个子表达式,进行多次组合运算后得到的结果
	//这样我们就可以抽象出表达式这个类,表达式是可以运算的,并且运算得到的结果仍然是表达式
	//表达式可分为两大类:
	//一类是变量表达式,即公式中的a、b、c、d等参数,是一种最小粒度的表达式,不可再拆分
	//一类是符号表达式,即一个表达式与另一个表达式,进行加减乘除后得到的新表达式
	abstract public class Expression {
	
	    //输入参数值,计算表达式结果
	    //params是公式中a、b、c、d等参数对应的实际数值
	    abstract public int interpret(Map params);
	}
	
	//变量表达式
	public class VarExpression extends Expression {
	
	    String var;
	
	    public VarExpression(String var) {
	        this.var = var;
	    }
	
	    @Override
	    public int interpret(Map params) {
	        return params.get(var);
	    }
	}
	
	//符号表达式
	abstract public class SymbolExpression extends Expression {
	
	    Expression leftExpression;
	    Expression rightExpression;
	
	    //两个子表达式进行运算,得到新表达式
	    public SymbolExpression(Expression leftExpression, Expression rightExpression) {
	        this.leftExpression = leftExpression;
	        this.rightExpression = rightExpression;
	    }
	}


	//加法表达式
	public class AddExpression extends SymbolExpression {
	
	    public AddExpression(Expression leftExpression, Expression rightExpression) {
	        super(leftExpression, rightExpression);
	    }
	
	    @Override
	    public int interpret(Map params) {
	        return leftExpression.interpret(params) + rightExpression.interpret(params);
	    }
	}
	
	//减法表达式
	public class SubExpression extends SymbolExpression {
	
	    public SubExpression(Expression leftExpression, Expression rightExpression) {
	        super(leftExpression, rightExpression);
	    }
	
	    @Override
	    public int interpret(Map params) {
	        return leftExpression.interpret(params) - rightExpression.interpret(params);
	    }
	}


	//计算器类,将输入的公式解析为表达式,并计算结果
	public class Calculator {
	
	    //输入公式和参数值,计算表达式结果
	    public static int calculate(String expression, Map params) {
	
	        //读取公式中的全部字符
	        String[] chars = new String[expression.length()];
	        for (int i = 0; i             
关注
打赏
1654938663
查看更多评论
0.0402s