欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


欢迎跳转到本文的原文链接:https://honeypps.com/design_pattern/interceptor/

给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

解释器模式的角色:

  1. 抽象表达式角色(AbstractExpression):声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口主要是一个interpret()方法,称作解释操作。
  2. 终结符表达式角色(Terminal Expression):实现了抽象表达式角色所需求的接口,主要是一个interpret()方法;文法中的每一个终结符都有一个具体终结表达式与之相对应。比如有一个简单的公式:R=R1+R2,在里面R1和R2就是终结符,对应的解析R1和R2的解释器就是终结符表达式。
  3. 非终结符表达式角色(Nonterminal Expression):文法中的每一条规则都需要一个具体的非终结符表达式,非终结符表达式一般是文法中的运算符或者其他关键字。比如R=R1+R2中的“+”就是非终结符,解析“+”的解释器就是一个非终结符表达式。
  4. 环境角色(Context):这个角色的任务一般是用来存放文法中各个终结符所对应的具体值。比如R=R1+R2,我们给R1赋值100,给R2赋值200。这些信息需要存放到环境角色中,很多情况下我们使用Map来充当环境角色就足够了。

这个模式确实用的不多,关于案例介绍可以翻看一下资料3.

优缺点
优点:

  1. 解释器是一个简单语法分析工具,它最显著的优点是扩展性,修改语法规则只要修改相应的非终结符表达式就可以了,若扩展语法,则只要增加非终结符类就可以了。

缺点:

  1. 解释器模式会引起类膨胀,每个语法都要产生一个非终结符表达式,语法规则比较复杂时,可能产生a大量的类文件,难以维护。
  2. 解释器模式采用递归调用方法,它导致调试非常复杂。
  3. 解释器由于使用了大量的循环和递归,所以当用于解析复杂、冗长的语法时,效率是难以忍受的。

TIPS: 尽量不要在重要模块中使用解释器模式,因为难以维护。在项目中,可以使用shell, python等脚本语言来代替解释器模式。

JDK中的解释器模式:
java.util.Pattern
java.text.Normalizer
java.text.Format


参考资料

  1. 《23种设计模式》
  2. 《细数JDK里的设计模式》
  3. 《《JAVA与模式》之解释器模式》

欢迎跳转到本文的原文链接:https://honeypps.com/design_pattern/interceptor/

欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


设计模式:解释器模式(Interpreter)相关推荐

  1. 深入浅出设计模式——解释器模式(Interpreter Pattern)

    模式动机 如果在系统中某一特定类型的问题发生的频率很高,此时可以考虑将这些问题的实例表述为一个语言中的句子,因此可以构建一个解释器,该解释器通过解释这些句子来解决这些问题. 解释器模式描述了如何构成一 ...

  2. 【白话设计模式二十二】解释器模式(Interpreter)

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# 白话设计模式 工厂模式 单例模式 [白话设计模式一]简单工厂模式(Simple Factory) [白话设计模式二] ...

  3. Python设计模式-解释器模式

    Python设计模式-解释器模式 代码基于3.5.2,代码如下; #coding:utf-8 #解释器模式class PlayContext():play_text = Noneclass Expre ...

  4. 设计模式 | 解释器模式及典型应用

    微信原文:设计模式 | 解释器模式及典型应用 博客原文:设计模式 | 解释器模式及典型应用 本文主要介绍解释器模式,在日常开发中,解释器模式的使用频率比较低 解释器模式 解释器模式(Interpret ...

  5. java interpreter_解释器模式(Interpreter)Java

    定义: 解释器模式(interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 结构图: AbstractExpression解释器模式 ...

  6. 设计模式 : 解释器模式

    解释器模式(interpreter) : 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 解释器模式需要解决的是,如果一种特定类型的问题发生的频率足够 ...

  7. 设计模式之解释器模式(Interpreter)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

  8. 设计模式之略见一斑(解释器模式Interpreter)

    解释器模式是一种比较难理解的模式,但如果你对Command(命令模式)和Composite(组合模式)很了解的话,你会发现其实解释器模式就是这两种的组合.为何要使用解释器模式,如何用解释器模式呢,这就 ...

  9. C++设计模式——解释器模式(interpreter pattern)

    一.原理讲解 1.1意图 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 1.2应用场景 文法简单.对于复杂的文法,文法的类层次变得庞大而无法管理:此 ...

  10. 设计模式的理解:解释器模式 Interpreter

    解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式.这种模式实现了一个表达式接口,该接口解释一个特定的上下文.这种模式被用在 SQL 解析.符号处 ...

最新文章

  1. log4net配置学习 之 日志等级
  2. 【Android 逆向】ART 脱壳 ( InMemoryDexClassLoader 脱壳 | BaseDexClassLoader 构造函数 | DexPathList 构造函数及后续调用 )
  3. h3c GR5200路由器上如何设置公网ip可以访问
  4. 怪咖发明家,乔布斯给了他四亿,他没要,转身靠发明救了10亿人。
  5. 请求报文的方法及get与post的区别
  6. Maven学习总结(3)——使用Maven构建项目
  7. zookeeper清空hbase_HBase在zookeeper下不创建目录
  8. 清除iphone文件app连接服务器记录,“文件”中连接外置设备或服务器 - iPhone附带的APP - iPhone使用手册...
  9. 使用Visual Studio对项目重命名
  10. 抓取Web网页数据分析
  11. [SCOI2010]连续攻击游戏
  12. MYSQL 查看表定义的 4 种方法
  13. 数据库系统概论第五版 答案
  14. 灵活多变的keytool和openssl生成证书,应用tomcat和nginx
  15. 两数求和的c语言程序代码,c语言求和(c语言求和代码)
  16. 操作系统--多线程进阶(上)
  17. C# XmlDocument处理XML元素节点
  18. 四十七、批量操作数据
  19. 关于计算重叠四边形的面积的算法
  20. L2-040 哲哲打游戏 (25 分)

热门文章

  1. des算法明文IP置换C语言编程,求助攻:C语言DES算法的实现程序有问题
  2. 编程开发使用的软件大全
  3. pytorch教程龙曲良31-35
  4. 关于My Sql update语句不能用子查询的解决办法
  5. 软件开发中的几种数据交换协议
  6. Direct2D (2) : 基本图形命令测试
  7. lua工具库penlight--06数据(一)
  8. CSS Hack汇总(转载)
  9. Rails安全导读【完】
  10. 兰州大学第一届『飞马杯』程序设计竞赛 - ★★体育课排队★★(二分+最大流)