2021设计模式春招面试复习:解释器模式(Interpreter-Pattern)

0源码地址

https://github.com/ImViper/design_pattern

0 讲讲运算的核心——模型公式及其如何实现

0.1 业务需求:输入一个模型公式(加、减运算),然后输入模型中的参数,运算出结果

设计要求

● 公式可以运行时编辑,并且符合正常算术书写方式,例如a+b-c
● 高扩展性,未来增加指数、开方、极限、求导等运算符号时较少改动
● 效率可以不用考虑,晚间批量运算

需求不复杂,若仅仅对数字采用四则运算,每个程序员都可以写出来
但是增加了增加模型公式就复杂了

先解释一下为什么需要公式,而不采用直接计算的方法,例如有如下3个公式
● 业务种类1的公式:a+b+c-d
● 业务种类2的公式:a+b+e-d
● 业务种类3的公式:a-f
其中,a、b、c、d、e、f参数的值都可以取得,如果使用直接计算数值的方法需要为每个品种写一个算法,目前仅仅是3个业务种类,那上百个品种呢?凉透了吧!建立公式,然后通过公式运算才是王道

以实现加减法公式为例,说明如何解析一个固定语法逻辑
采用逐步分析方法,带领大家了解实现过程

想想公式中有什么?运算元素和运算符号

  • 运算元素
    指a、b、c等符号,需要具体赋值的对象,也叫做终结符号,为什么叫终结符号呢?
    因为这些元素除了需要赋值外,不需要做任何处理,所有运算元素都对应一个具体的业务参数,这是语法中最小的单元逻辑,不可再分
  • 运算符号
    就是加减符号,需要我们编写算法进行处理,每个运算符号都要对应处理单元,否则公式无法运行,运算符号也叫做非终结符号

共同点是都要被解析,不同点是所有运算元素具有相同的功能,可以用一个类表示
而运算符号则是需要分别进行解释,加法需要加法解析器,减法需要减法解析器
初步分析加减法类图
这是一个很简单的类图
VarExpression用来解析运算元素,各个公式能运算元素的数量是不同的,但每个运算元素都对应一个VarExpression对象
SybmolExpression负责解析符号,由两个子类

  • AddExpression(负责加法运算)
  • SubExpression(负责减法运算)
    解析器的开发工作已经完成了,但是需求还没有完全实现。我们还需要对解析器进行封装,
    来实现

解析的工作完成了,我们还需要把安排运行的先后顺序(

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值