解释器模式字面意思,也即解释某些内容的含义。这种设计模式是实际开发中最不容易用到的。比如SQL解析,符号处理引擎,会用到解释器模式,属于更底层的开发人员才会用到的设计模式。
本文通过解释器模式的概念、作用和简单的例子来说明解释器模式。读者可以理解这部分内容。
[En]
This article illustrates the interpreter pattern with the concept, role and simple examples of the interpreter pattern. Readers can understand this part of the content.
一、概念
解释器模式是指给定一门语言,定义它的文法的一种表示(如:加减乘除表达式和正则表达式等),然后再定义一个解释器,该解释器用来解释我们的文法表示(表达式)。
解释器模式的结构与组合模式相似,不过其包含的组成元素比组合模式多,而且组合模式是对象结构型模式,而解释器模式是类行为型模式。
解释器模式中包含四个角色:
- 抽象解释器(Abstract Expression)角色:定义解释器的接口,约定解释器的解释操作,主要包含解释方法 interpret()。
- 终结符解释器(Terminal Expression)角色:是抽象表达式的子类,用来实现文法中与终结符相关的操作,文法中的每一个终结符都有一个具体终结表达式与之相对应。
- 非终结符解释器(Nonterminal Expression)角色:也是抽象表达式的子类,用来实现文法中与非终结符相关的操作,文法中的每条规则都对应于一个非终结符表达式。
- 环境(Context)角色:通常包含各个解释器需要的数据或是公共的功能,一般用来传递被所有解释器共享的数据,后面的解释器可以从这里获取这些值。 解释器模式类结构图如图所示:
二、实现
相关文章
OutOfMemoryError异常
除了程序计数器外,虚拟机内存在其他几个运行时区域都有发生OutOfMemoryError异常的可能。 Java堆溢出 设置Idea堆的大小为20MB,不可扩展(-Xms参数与最大值-Xmx参数设置为一...
Hibernate基础入门2
HQL与Criteria HQL(Hibernate Query Language)-官方推荐面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类和属性其他部分不区分大小写...
BigDecimal详解和精度问题
JavaGuide :「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。 BigDecimal 是大厂 Java 面试常问的一个知识点。 《阿里巴巴 Java 开发手册》...
Spring中controller中关于GET和POST请求的参数接收
Spring中controller中关于GET和POST请求的参数接收 GET请求 参数用&符号连接在一起[/get?name=tom] //无参 //没有任何参数的请求 @GetMappin...
1.BigDecimal用法
1.BigDecimal用法详解 一、简介 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效...
空对象要不得——记一次修改魔兽世界宏的感慨
昨天群里有个盗贼发了个宏 乍一看这个条件判断语句写的好像没有问题,语句的判断条件是: 1.当存在焦点,且按键模式为alt时,选取该焦点单位为目标释放致盲。 2.对鼠标指向的单位释放致盲。 3.否则释放...
Dubbo与SpringBoot整合
1.选择ZooKeeper作为注册中心 在linux环境中使用docker安装ZooKeeper //拉取zookeeper镜像 docker pull zookeeper//启动zookeeperd...
3.上海郊区某家公司自己眼瞎做错的题
switch。。。case public static void main(String[] args) { int result = 0; int i = 2; switch (i) { case ...
在Spring中测试CGLIB动态代理遇到ClassNotFoundException: org.objectweb.asm.Type问题
在Spring项目中进行简单的cglib动态代理的学习测试,主要代码如下: 一个目标类HaveDinnerService public class HaveDinnerService { public...
我使用Spring AOP实现了用户操作日志功能
我使用Spring AOP实现了用户操作日志功能 今天答辩完了,复盘了一下系统,发现还是有一些东西值得拿出来和大家分享一下。 需求分析 系统需要对用户的操作进行记录,方便未来溯源 第一个想法是在每种方...
汇总数据库信息的存储过程
问题: mysql日常开发过程中,数据库、表的很多信息分散在不同的工具和不同的界面中,来回切换查找非常麻烦。 解决方式: 基于这个问题,编写了一个存储过程来收集存储过程中的日常信息,这非常方便查询。[...
恐怖的Hibernate和JavaFX Table CallBack!
最近在做 JavaFX 应用,不管再怎么避免数据持久化,但面对几十万的数据量的时候也只能乖乖的去配置持久层框架了。 一开始打算还是使用Mybatis,我在做Web的时候就是一只用Mybatis框架,而...