mirror of
https://github.com/crazybber/go-pattern-examples.git
synced 2024-11-22 20:06:02 +03:00
.. | ||
interpreter_caculator.go | ||
interpreter_test.go | ||
interpreter.go | ||
README.md |
解释器模式
解释器模式的本质是就是自己定一套规则、语言、表达方式,也就是所谓的DSL(Domain Specific Language),然后按照定义解析执行DSL,常见的自定义协议,私有协议,就是一个中解释器模式的概念,使用者按照协议的规则做事。
解释器模式的意义在于,它分离多种复杂功能的实现,每个功能只需关注自身的解释。
对于调用者不用关心内部的解释器的工作,只需要用简单的方式组合命令。
常见的redis协议就是一个很好解释器模式实现,通过redis-cli可以发送各种指令给到redis-server,服务端解释执行后返回结果。
我们常说的计算器,是一个很典型的解释器模式,它用来解释执行加减乘除的运行规则,现实生活中,哑语翻译、音乐乐谱、摩尔斯电码,道路交通指示系统,等都是解释器模式的好例子。
我们来设计一个简单交流标识系统,来表达会议中两个人交流时候的谈话方式,以代替冗长的语言表述.
A "->" B 表示 A说,B听,此时B不能发言。 A "<-" B 表示 B说,A听,此时B不能发言。 A "<->" B 表示 A 和 B 可以自由发言。
解释器模式中的关键角色:
1. 表达式 一般就是一串带解析的内容流,可能是字符串,也可能是字节流等
2. 表达式解释类,一般就是解析器
3. 表达式子类型解析器,对于表达式中解析到的不同情况,交给不同的解析子类去处理。