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