23.Interpreter Pattern 解析器模式

在特定领域中,某些变化虽然频繁,但可以抽象为某种规则。这种时候,结合特定领域,将问题抽象为语法规则,从而给出在该领域下的一般性解决方案。

动机:在软件构建过程中,如果某一特定领域的问题比较复杂,类似的结构不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化,在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。

定义:给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。

结构:

总结:只用满足业务规则频繁变化,且类似的结构不断重复出现,并且容易抽象为语法规则的问题,才适合使用Interpreter模式。

使用Interpreter模式来表示文法规则,从而可以使用面向对象的极强来方便地“扩展”文法。

它适合简单的文法表示,不适合复杂的。

此模式会产生比较大的类层次结构,那样性能较低,不如求助于语法分析生成器这样的标准工具,所以解析器模式不常用。

 

例子:比如将人民币的大写字符串,转换成可以计算的阿拉伯数字,比如比较长的四则运算:a+b-c+d-d……

这个运算式子是从左往右的,所以其实是一个树结构,使用解析器模式的步骤是:

1. 通过键值对实现字母与数字的映射

2. 解析表达式,创建树结构

3. 在栈中取元素,和语法(+)与行为操作的映射

每实现了一次操作,则用结果将原始的两个数据替换掉,并使用虚函数递归,运行到底。

参考:https://www.bilibili.com/video/av24176315/?p=25

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值