本文以前面提到的四则运算的语法为例进行说明。首先回忆一下类图。

Aha!设计模式(84)-解释器模式(5)

本文以实际的例子中会用到的类进行说明。首先是基类。

 

Aha!设计模式(84)-解释器模式(5)

这个类的实现非常简单,只是定义了一个求值函数。所有具体的表达式类都会实现这个函数。

 

Aha!设计模式(84)-解释器模式(5)

 

接下来是两个共通类,区别在于是否包含下级运算。这两个类的内容很简单,只是提供了保存运算信息的数据结构。

 

Aha!设计模式(84)-解释器模式(5)

 

加法表达式的运算很简单,首先取得第一个表达式并求值,然后对后续运算表达式求值,并根据运算符是加还是减对表达式的求值结果进行二次运算。

 

Aha!设计模式(84)-解释器模式(5)

 

乘法表达式和加法表达式基本一样,只是中间的运算符从加减变成了乘除。

 

Aha!设计模式(84)-解释器模式(5)

 

函数调用类和其他的略有不同,内部保存了函数和参数表达式。这里应用了Python语言的特性,将函数直接作为可调用对象传入,最大限度地提供了扩展性。

 

Aha!设计模式(84)-解释器模式(5)

 

整数表达式和小数表达式,结构完全相同,实际上可以考虑合二为一。

 

Aha!设计模式(84)-解释器模式(5)

主程序的代码行数虽然比较多,但是如果结合下面的对象图来看就会很容易理解。

 

Aha!设计模式(84)-解释器模式(5)

 

觉得本文有帮助?请分享给更多人。

阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

Aha!设计模式(84)-解释器模式(5)

相关文章:

  • 2021-10-29
  • 2021-04-11
  • 2022-01-15
  • 2021-08-11
猜你喜欢
  • 2021-06-17
  • 2021-06-20
  • 2021-12-03
  • 2021-04-05
  • 2021-04-27
  • 2021-12-17
  • 2021-09-27
相关资源
相似解决方案