设计模式:解释器模式(Interpreter)
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。
欢迎跳转到本文的原文链接:https://honeypps.com/design_pattern/interceptor/
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
解释器模式的角色:
- 抽象表达式角色(AbstractExpression):声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口主要是一个interpret()方法,称作解释操作。
- 终结符表达式角色(Terminal Expression):实现了抽象表达式角色所需求的接口,主要是一个interpret()方法;文法中的每一个终结符都有一个具体终结表达式与之相对应。比如有一个简单的公式:R=R1+R2,在里面R1和R2就是终结符,对应的解析R1和R2的解释器就是终结符表达式。
- 非终结符表达式角色(Nonterminal Expression):文法中的每一条规则都需要一个具体的非终结符表达式,非终结符表达式一般是文法中的运算符或者其他关键字。比如R=R1+R2中的“+”就是非终结符,解析“+”的解释器就是一个非终结符表达式。
- 环境角色(Context):这个角色的任务一般是用来存放文法中各个终结符所对应的具体值。比如R=R1+R2,我们给R1赋值100,给R2赋值200。这些信息需要存放到环境角色中,很多情况下我们使用Map来充当环境角色就足够了。
这个模式确实用的不多,关于案例介绍可以翻看一下资料3.
优缺点
优点:
- 解释器是一个简单语法分析工具,它最显著的优点是扩展性,修改语法规则只要修改相应的非终结符表达式就可以了,若扩展语法,则只要增加非终结符类就可以了。
缺点:
- 解释器模式会引起类膨胀,每个语法都要产生一个非终结符表达式,语法规则比较复杂时,可能产生a大量的类文件,难以维护。
- 解释器模式采用递归调用方法,它导致调试非常复杂。
- 解释器由于使用了大量的循环和递归,所以当用于解析复杂、冗长的语法时,效率是难以忍受的。
TIPS: 尽量不要在重要模块中使用解释器模式,因为难以维护。在项目中,可以使用shell, python等脚本语言来代替解释器模式。
JDK中的解释器模式:
java.util.Pattern
java.text.Normalizer
java.text.Format
参考资料
- 《23种设计模式》
- 《细数JDK里的设计模式》
- 《《JAVA与模式》之解释器模式》
欢迎跳转到本文的原文链接:https://honeypps.com/design_pattern/interceptor/
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。
设计模式:解释器模式(Interpreter)相关推荐
- 深入浅出设计模式——解释器模式(Interpreter Pattern)
模式动机 如果在系统中某一特定类型的问题发生的频率很高,此时可以考虑将这些问题的实例表述为一个语言中的句子,因此可以构建一个解释器,该解释器通过解释这些句子来解决这些问题. 解释器模式描述了如何构成一 ...
- 【白话设计模式二十二】解释器模式(Interpreter)
为什么80%的码农都做不了架构师?>>> #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...
- Python设计模式-解释器模式
Python设计模式-解释器模式 代码基于3.5.2,代码如下; #coding:utf-8 #解释器模式class PlayContext():play_text = Noneclass Expre ...
- 设计模式 | 解释器模式及典型应用
微信原文:设计模式 | 解释器模式及典型应用 博客原文:设计模式 | 解释器模式及典型应用 本文主要介绍解释器模式,在日常开发中,解释器模式的使用频率比较低 解释器模式 解释器模式(Interpret ...
- java interpreter_解释器模式(Interpreter)Java
定义: 解释器模式(interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 结构图: AbstractExpression解释器模式 ...
- 设计模式 : 解释器模式
解释器模式(interpreter) : 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够 ...
- 设计模式之解释器模式(Interpreter)摘录
23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...
- 设计模式之略见一斑(解释器模式Interpreter)
解释器模式是一种比较难理解的模式,但如果你对Command(命令模式)和Composite(组合模式)很了解的话,你会发现其实解释器模式就是这两种的组合.为何要使用解释器模式,如何用解释器模式呢,这就 ...
- C++设计模式——解释器模式(interpreter pattern)
一.原理讲解 1.1意图 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 1.2应用场景 文法简单.对于复杂的文法,文法的类层次变得庞大而无法管理:此 ...
- 设计模式的理解:解释器模式 Interpreter
解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式.这种模式实现了一个表达式接口,该接口解释一个特定的上下文.这种模式被用在 SQL 解析.符号处 ...
最新文章
- log4net配置学习 之 日志等级
- 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | BaseDexClassLoader 构造函数 | DexPathList 构造函数及后续调用 )
- h3c GR5200路由器上如何设置公网ip可以访问
- 怪咖发明家,乔布斯给了他四亿,他没要,转身靠发明救了10亿人。
- 请求报文的方法及get与post的区别
- Maven学习总结(3)——使用Maven构建项目
- zookeeper清空hbase_HBase在zookeeper下不创建目录
- 清除iphone文件app连接服务器记录,“文件”中连接外置设备或服务器 - iPhone附带的APP - iPhone使用手册...
- 使用Visual Studio对项目重命名
- 抓取Web网页数据分析
- [SCOI2010]连续攻击游戏
- MYSQL 查看表定义的 4 种方法
- 数据库系统概论第五版 答案
- 灵活多变的keytool和openssl生成证书,应用tomcat和nginx
- 两数求和的c语言程序代码,c语言求和(c语言求和代码)
- 操作系统--多线程进阶(上)
- C# XmlDocument处理XML元素节点
- 四十七、批量操作数据
- 关于计算重叠四边形的面积的算法
- L2-040 哲哲打游戏 (25 分)