应用场景
解释器模式,英文名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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?