介绍
解释器模式主要用于评估 语言的语法或表达式,属于行为型模式。
这种模式提供了一个表达式接口,用于解释一个特定的上下文。
核心:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器来解释语言中的句子。
如何解决:构建语法树,定义终结符与非终结符。
关键代码:构建环境类,包含解释器之外的一些全局信息,一般是 HashMap。
优点: 1、可扩展性比较好,灵活。 2、增加了新的解释表达式的方式。 3、易于实现简单文法。
缺点: 1、可利用场景比较少。 2、对于复杂的文法比较难维护。 3、解释器模式会引起类膨胀。 4、解释器模式采用递归调用方法。
使用场景:
- 可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。
- 一些重复出现的问题可以用一种简单的语言来进行表达。
- 比如加减乘除四则运算,但是公式每次都不同,有时是a+b-cd,有时是ab+c-d等,公式千变万化,但是都是由加减乘除四个非终结符来连接的,这时我们就可以使用解释器模式。
- 一个简单语法需要解释的场景。
示例
简单模拟一个关于加减乘除的算术运算操作,定义抽象表达式接口,定义变量类,定义具体表达式实现类,进行测试
1、创建抽象表达式
1 | interface Expression { |
2、环境类
1 | //环境(Context)角色 |
3、实体表达式
1 | //获取变量的表达式 |
4、测试
1 | public class Main { |
可以看到,main方法中,先定义三个变量Variable,通过Context类以HashMap的方式给三个变量赋值,然后根据前面定义的表达式类进行解析,就得到了结论。
参考
- 本文作者: xczll
- 本文链接: https://xczllgit.github.io/2020/03/24/designPattern/2020-03-24-interpreterPattern/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!