知识卡片
解释器模式的适用边界与现成替代方案
内容
[[解释器模式的定义与四个角色]]适合两类场景:重复发生的简单语法解析;需解释简单 语法的场景。不建议在重要模块使用,因维护成本高。更好替代方案:嵌入JRuby/Groovy/Shell 等脚本语言弥补Java动态语法解析不足;或直接用Expression4J、MESP、Jep等开源解析库, 无需手写解释器。发散:遇到”符合经典模式”的场景应先查是否已有成熟库,自己实现往往不是 最高性价比选择。
参考来源
- 位置:《设计模式之禅(第2版)》第27章《解释器模式》(源文件:_epub-src/text/part0124.html、part0125.html)
- 结论依据:原文说明使用场景为"重复发生的问题"和"一个简单语法需要解释的场景",并在注意事项和最佳实践中建议"尽量不要在重要的模块中使用解释器模式……可以使用shell、JRuby、Groovy等脚本语言来代替解释器模式",或直接使用Expression4J、MESP、Jep等开源解析工具包。
- 原始内容:重复发生的问题可以使用解释器模式……一个简单语法需要解释的场景……尽量不要在重要的模块中使用解释器模式,否则维护会是一个很大的问题……可以考虑一下Expression4J、MESP(Math Expression String Parser)、Jep等开源的解析工具包……自己没有必要从头开始编写解释器。