第十章 化繁为简的翻译机——解释器模式
解释器模式是一种用得比较少的行为型设计模式,它提供了一种解释语言或者说是表达式的方法,该模式定义了一个表达式接口,然后通过该接口解释一个特定的上下文。解释器模式使用得相对较少,所以基本上了解一下就行了。
1.定义
给定一个语言,定义它的语法的一种表示,并定义一个解释器,该解释器使用定义的表示来解释语言中的句子。
实在是不好理解,这其中有几个关键词,语言、文法、解释器。
语法,可以看作是一种结构,例如“我是程序员”,“我是工程师”,“我是大帅比”,这样的“我是XXX”的结构就可以看作是一条语法,这样的语法概念说起来就太广了,更抽象点,可以将abcd看作是一个语法,
语言,就是使用规定格式和语法的代码。
解释器,就是翻译器,用来翻译规定语法的句子。
2.使用场景
1).如果某个简单的语言需要解释执行而且可以将该语言中的语句表示为一个抽象语法树时。
2).在某些特定的领域出现不断重复的问题时,可以将该领域的问题转化为一种语法规则下的语句,然后构建解释器来解释该语句。
3.总结
解释器模式真的是一种用得很少的模式,Android源码中都不容易找到它的体现,所以我觉得也应该有轻有重,简单了解一下就行了。
优点:
1).灵活的扩展性,想对文法规则进行扩展时,只需要增加相应的非终结符解释器,并在构建抽象语法树时,使用到新增的解释器对象进行具体的解释即可。
缺点:
1).对于每一条语法都可以对应至少一个解释器,会生成大量的类,导致后期维护困难。
2).对于过于复杂的语法,构建抽象语法树会非常困难,甚至需要构建多棵抽象语法树,所以对于复杂的语法不推荐使用解释器模式。