解释器模式,其实就是编译原理中的语法解释器,如果用在项目中,可以用于实现动态脚本的解析,也就是说项目可以支持用户脚本扩展。
但实际上,这种运行时解释,效率很慢,如果不是很需要的话,不建议使用。
一种简单实现:
Context是上下文场景,比如做一个计算器,那这个Context可以作为一个Calculator类,可以在构造函数中用于接受待解析的表达式(如 a+b-c),以及执行相应的解释。
Expression代表不同的symbol的操作,比如:
1.+对应的Expression,操作是:将+的左结点出栈后,和右结点生成+表达式对象压栈(也可以是其他存储结构)
2.具体数字的Expression就只是把数字作为结点存储后压栈
等。
最后在表达式解释完成后,将根结点表达式出栈待用。
Context执行Run,将表达式(a+b-c)中abc的真实值传入,计算得到最后结果。
实现一个较好的解释器需要编译原理知识,可以学习vczh的博客http://www.cppblog.com/vczh/