设计模式 | 解释器模式及典型应用 (3)

通过一个示例,调试查看程序中间经历的步骤

public class SpringELTest { public static void main(String[] args) { // 1. 构建解析器 org.springframework.expression.ExpressionParser parser = new SpelExpressionParser(); // 2. 解析表达式 Expression expression = parser.parseExpression("100 * 2 + 400 * 1 + 66"); // 3. 获取结果 int result = (Integer) expression.getValue(); System.out.println(result); // 结果:666 } }

EL表达式解析后得到表达式 (((100 * 2) + (400 * 1)) + 66)

EL表达式解析后得到的表达式

如果用图形把其这棵AST抽象语法树简单地画出来,大概是这样

调用 expression.getValue() 求值,此时的 ast 是语法树的头结点,也就是 + OpPlus,所以通过 this.ast.getValue(expressionState) 进入了 OpPlus 的 getValue 方法(是父类中的方法),接着进入 getValueInternal 方法,然后递归计算操作符左边的值,递归计算操作符右边的值,最后相加返回

参考:
刘伟.Java设计模式
Java设计模式精讲

后记

欢迎评论、转发、分享

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpzsjx.html