在特定领域中,某些变化虽然频繁,但可以抽象为某种规则。这种时候,结合特定领域,将问题抽象为语法规则,从而给出在该领域下的一般性解决方案。
动机:在软件构建过程中,如果某一特定领域的问题比较复杂,类似的结构不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化,在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。
定义:给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。
结构:
总结:只用满足业务规则频繁变化,且类似的结构不断重复出现,并且容易抽象为语法规则的问题,才适合使用Interpreter模式。
使用Interpreter模式来表示文法规则,从而可以使用面向对象的极强来方便地“扩展”文法。
它适合简单的文法表示,不适合复杂的。
此模式会产生比较大的类层次结构,那样性能较低,不如求助于语法分析生成器这样的标准工具,所以解析器模式不常用。
例子:比如将人民币的大写字符串,转换成可以计算的阿拉伯数字,比如比较长的四则运算:a+b-c+d-d……
这个运算式子是从左往右的,所以其实是一个树结构,使用解析器模式的步骤是:
1. 通过键值对实现字母与数字的映射
2. 解析表达式,创建树结构
3. 在栈中取元素,和语法(+)与行为操作的映射
每实现了一次操作,则用结果将原始的两个数据替换掉,并使用虚函数递归,运行到底。
参考:https://www.bilibili.com/video/av24176315/?p=25