设计模式之解释器模式

Java30

解释器模式字面意思,也即解释某些内容的含义。这种设计模式是实际开发中最不容易用到的。比如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.

一、概念

解释器模式是指给定一门语言,定义它的文法的一种表示(如:加减乘除表达式和正则表达式等),然后再定义一个解释器,该解释器用来解释我们的文法表示(表达式)。

解释器模式的结构与组合模式相似,不过其包含的组成元素比组合模式多,而且组合模式是对象结构型模式,而解释器模式是类行为型模式。

解释器模式中包含四个角色:

  1. 抽象解释器(Abstract Expression)角色:定义解释器的接口,约定解释器的解释操作,主要包含解释方法 interpret()。
  2. 终结符解释器(Terminal Expression)角色:是抽象表达式的子类,用来实现文法中与终结符相关的操作,文法中的每一个终结符都有一个具体终结表达式与之相对应。
  3. 非终结符解释器(Nonterminal Expression)角色:也是抽象表达式的子类,用来实现文法中与非终结符相关的操作,文法中的每条规则都对应于一个非终结符表达式。
  4. 环境(Context)角色:通常包含各个解释器需要的数据或是公共的功能,一般用来传递被所有解释器共享的数据,后面的解释器可以从这里获取这些值。 解释器模式类结构图如图所示:

设计模式之解释器模式

二、实现

输入验证码查看隐藏内容

扫描二维码关注本站微信公众号 Johngo学长
或者在微信里搜索 Johngo学长
回复 svip 获取验证码
wechat Johngo学长

相关文章
Java

线程池面试必考

你对Java线程池了解吗?你有用过线程池吗?那先说下线程池核心参数吧。。。对不起,我回去再看看吧。 为了得体,今天让我们来整理一下面试线索池中的几个面试问题。[En]In order to be de...
Java

OutOfMemoryError异常

除了程序计数器外,虚拟机内存在其他几个运行时区域都有发生OutOfMemoryError异常的可能。 Java堆溢出 设置Idea堆的大小为20MB,不可扩展(-Xms参数与最大值-Xmx参数设置为一...
Java

Hibernate基础入门2

HQL与Criteria HQL(Hibernate Query Language)-官方推荐面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除了JAVA类和属性其他部分不区分大小写...
Java

BigDecimal详解和精度问题

JavaGuide :「Java学习+面试指南」一份涵盖大部分 Java 程序员所需要掌握的核心知识。 BigDecimal 是大厂 Java 面试常问的一个知识点。 《阿里巴巴 Java 开发手册》...
Java

1.BigDecimal用法

1.BigDecimal用法详解 一、简介 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效...
Java

sql索引优化思路

【开发】SQL优化思路(以oracle为例) powered by wanglifeng https://www.cnblogs.com/wanglifeng717 单表查询的优化思路 单表查询是最简...
Java

建造者模式

Builder模式:使用多个简单对象逐步构建一个复杂对象,它适用于一些基本组件,但可以有多种组合,这就是所谓的\[En]Builder mode: use multiple simple object...
Java

空对象要不得——记一次修改魔兽世界宏的感慨

昨天群里有个盗贼发了个宏 乍一看这个条件判断语句写的好像没有问题,语句的判断条件是: 1.当存在焦点,且按键模式为alt时,选取该焦点单位为目标释放致盲。 2.对鼠标指向的单位释放致盲。 3.否则释放...
Java

Dubbo与SpringBoot整合

1.选择ZooKeeper作为注册中心 在linux环境中使用docker安装ZooKeeper //拉取zookeeper镜像 docker pull zookeeper//启动zookeeperd...
Java

我使用Spring AOP实现了用户操作日志功能

我使用Spring AOP实现了用户操作日志功能 今天答辩完了,复盘了一下系统,发现还是有一些东西值得拿出来和大家分享一下。 需求分析 系统需要对用户的操作进行记录,方便未来溯源 第一个想法是在每种方...
Java

汇总数据库信息的存储过程

问题: mysql日常开发过程中,数据库、表的很多信息分散在不同的工具和不同的界面中,来回切换查找非常麻烦。 解决方式: 基于这个问题,编写了一个存储过程来收集存储过程中的日常信息,这非常方便查询。[...
Java

恐怖的Hibernate和JavaFX Table CallBack!

最近在做 JavaFX 应用,不管再怎么避免数据持久化,但面对几十万的数据量的时候也只能乖乖的去配置持久层框架了。 一开始打算还是使用Mybatis,我在做Web的时候就是一只用Mybatis框架,而...