前面我们介绍了设计模式中的备忘录模式【用于记录对象的状态】,今天我们来介绍一下解释器模式
我们还是通过一个案例来介绍一下
案例:四则运算问题
1)通过解释器模式来实现四则运算,如计算a+b-c
的值,具体要求
2)先输入表达式的形式,比如 a+b+c-d+e,
要求表达式的字母不能重复 在分别输入a ,b, c, d, e
的值
3)
最后求出结果:如图
![](https://img-blog.csdnimg.cn/20201013095742186.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0MDY1MDg4,size_16,color_FFFFFF,t_70)
一.传统方案解决四则运算问题分析
1) 编写一个方法,接收表达式的形式,然后根据用户输入的数值进行解析【一般都是用 两个栈来实现】,得到结果
2) 问题分析:如果加入新的运算符,比如 * / ( 等等,不利于扩展,另外让一个方法来 解析会造成程序结构混乱,不够清晰.
3) 解决方案:可以考虑使用解释器模式, 即: 表达式 -> 解释器(可以有多种) -> 结 果
二.解释器模式基本介绍
1)
在编译原理中,一个算术表达式通过
词法分析器
形成词法单元,而后这些词法 单元再通过语法分析器
构建语法分析树,最终形成一颗抽象的语法分析树。这 里的词法分析器和语法分析器都可以看做是解释器
2)
解释器模式(
Interpreter Pattern
):是指给定一个语言
(
表达式
)
,定义它的文法 的一种表示,并定义一个解释器,使用该解释器来解释语言中的句子(
表达式
)
3)
应用场景
- 应用可以将一个需要解释执行的语言中的句子表示为一个抽象语法树
- 一些重复出现的问题可以用一种简单的语言来表达
- 一个简单语法需要解释的场景
4)
这样的例子还有,比如编译器、运算表达式计算、正则表达式、机器人等
5)原理UML类图
1) Context: 是环境角色,含有解释器之外的全局信息.
2) AbstractExpression: 抽象表达式, 声明一个抽象的解释操作,这个方法为抽象语法树中所有的节点所 共享
3) TerminalExpression: 为终结符表达式, 实现与文法中的终结符相关的解释操作
4) NonTermialExpression: 为非终结符表达式,为文法中的非终结符实现解释操作.
5) 说明: 输入Context he TerminalExpression 信息通过Client 输入即可
三.通过解释器模式来实现案例