17-Java解释器模式 ( Interpreter Pattern )
Java解释器模式
- 摘要
- 实现
- 范例
-
解释器模式(Interpreter Pattern)实现了一个表达式接口,该接口解释一个特定的上下文
-
这种模式被用在 SQL 解析、符号处理引擎等
-
解释器模式提供了评估语言的语法或表达式的方式,它属于行为型模式
摘要
1. 意图
- 给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子
2. 主要解决
- 对于一些固定文法构建一个解释句子的解释器
3. 何时使用
- 如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题
4. 如何解决
- 构件语法树,定义终结符与非终结符
5. 关键代码
- 构件环境类,包含解释器之外的一些全局信息,一般是 HashMap
6. 应用实例
- 编译器、运算表达式计算
7. 优点
- 可扩展性比较好,灵活;
- 增加了新的解释表达式的方式;
- 易于实现简单文法;
8. 缺点
- 可利用场景比较少;
- 对于复杂的文法比较难维护;
- 解释器模式会引起类膨胀;
- 解释器模式采用递归调用方法;
9. 使用场景
- 可以将一个需要解释执行的语言中的句子表示为一个抽象语法树;
- 一些重复出现的问题可以用一种简单的语言来进行表达;
- 一个简单语法需要解释的场景;
10. 注意事项
- 可利用场景比较少,JAVA 中如果碰到可以用 expression4J 代替
实现

- 定义一个接口Expression和实现了Expression接口的实体类;
- 定义作为上下文中主要解释器的TerminalExpression类,其他的类OrExpression、AndExpression用于创建组合式表达式;
- 定义类InterpreterPatternDemo使用Expression类创建规则和演示表达式的解析;
范例
1. 创建一个表达式接口.
Expression.java
package com.demo.gof;
public interface Expression {public boolean interpret(String context);
}
2. 创建实现接口的实体类
RealImage.java
package com.demo.gof;
public class RealImage implements Image {private String fileName;public RealImage(String fileName){this.fileName = fileName;loadFromDisk(fileName);}@Overridepublic void display() {System.out.println("Displaying " + fileName);}private void loadFromDisk(String fileName){System.out.println("Loading " + fileName);}
}
ProxyImage.java
public class ProxyImage implements Image{private RealImage realImage;private String fileName;public ProxyImage(String fileName){this.fileName = fileName;}@Overridepublic void display() {if(realImage == null){realImage = new RealImage(fileName);}realImage.display();}
}
3. 当被请求时,使用 ProxyImage 来获取 RealImage 类的对象
ProxyPatternDemo.java
package com.demo.gof;
public class ProxyPatternDemo {public static void main(String[] args) {Image image = new ProxyImage("test_10mb.jpg");//图像将从磁盘加载image.display(); System.out.println("");//图像将无法从磁盘加载image.display(); }
}
编译运行以上 Java 范例,输出结果如下
$ javac -d . src/main/com.demo/gof/ProxyPatternDemo.java
$ java com.demo.gof.ProxyPatternDemo
Loading test_10mb.jpg
Displaying test_10mb.jpgDisplaying test_10mb.jpg相关文章:
17-Java解释器模式 ( Interpreter Pattern )
Java解释器模式 摘要实现范例 解释器模式(Interpreter Pattern)实现了一个表达式接口,该接口解释一个特定的上下文 这种模式被用在 SQL 解析、符号处理引擎等 解释器模式提供了评估语言的语法或表达式的方式,它属于行为型模式 …...
mysql的安装启动
下载 2.解压后放在某个目录下: 3.修改系统变量 4.修改配置文件 (创建一个ini文件放在解压后的目录下) 内容如下 5.初始化mysql 1.用管理员模式下输入: mysqld --initialize --console C:\WINDOWS\system32>mysqld --initia…...
[Java安全入门]三.CC1链
1.前言 Apache Commons Collections是一个扩展了Java标准库里的Collection结构的第三方基础库,它提供了很多强大的数据结构类型和实现了各种集合工具类。Commons Collections触发反序列化漏洞构造的链叫做cc链,构造方式多种,这里先学习cc1链…...
为什么虚拟dom比真实dom更快
虚拟DOM(Virtual DOM)之所以在某些情况下比直接操作真实DOM更快,主要有以下几个原因: 批量更新:虚拟DOM可以将多个DOM操作批量更新为一次操作。当需要对真实DOM进行多次修改时,直接操作真实DOM会导致浏览器…...
力扣---腐烂的橘子
题目: bfs思路: 感觉bfs还是很容易想到的,首先定义一个双端队列(队列也是可以的~),如果值为2,则入队列,我这里将队列中的元素定义为pair<int,int>。第一个int记录在数组中的位…...
【开源物联网平台】FastBee使用EMQX5.0接入步骤
🌈 个人主页:帐篷Li 🔥 系列专栏:FastBee物联网开源项目 💪🏻 专注于简单,易用,可拓展,低成本商业化的AIOT物联网解决方案 目录 一、将java内置mqtt broker切换成EMQX5…...
【数学】【组合数学】1830. 使字符串有序的最少操作次数
作者推荐 视频算法专题 本博文涉及知识点 数学 组合数学 LeetCode1830. 使字符串有序的最少操作次数 给你一个字符串 s (下标从 0 开始)。你需要对 s 执行以下操作直到它变为一个有序字符串: 找到 最大下标 i ,使得 1 < i…...
算法(数据结构)面试问题准备 二分法/DFS/BFS/快排
一、算法概念题 1. 二分法 总结链接几种查找情况的模板另一个好记的总结总结:搜索元素两端闭,while带等,mid1,结束返-1 搜索边界常常左闭右开,while小于,mid看边界开闭,闭开,结束i…...
Unity3d C#实现文件(json、txt、xml等)加密、解密和加载(信息脱敏)功能实现(含源码工程)
前言 在Unity3d工程中经常有需要将一些文件放到本地项目中,诸如json、txt、csv和xml等文件需要放到StreamingAssets和Resources文件夹目录下,在程序发布后这些文件基本是对用户可见的状态,造成信息泄露,甚至有不法分子会利用这些…...
解释一下分库分表的概念和优缺点。如何设计一个高性能的数据库架构?
解释一下分库分表的概念和优缺点。 分库分表是数据库架构优化的常见手段,主要用于解决单一数据库或表在数据量增大、访问频率提高时面临的性能瓶颈和扩展性问题。 概念: 分库(Sharding-Database): 将原本存储在一个…...
功能强大使用简单的截图/贴图工具,PixPin
一、下载链接 PixPin 截图/贴图/长截图/文字识别/标注 | PixPin 截图/贴图/长截图/文字识别/标注 (pixpinapp.com) 二、功能 截图/贴图/长截图/文字识别/标注 三、安装教程 根据提示安装即可: 四、快捷键 1.软件自带快捷键(右击PixPin查看 )…...
机器学习周报第32周
目录 摘要Abstract一、文献阅读1.论文标题2.论文摘要3.论文背景4.论文方案4.1 多视角自注意力网络4.2 距离感知4.3 方向信息4.4 短语模式 二、self-attention 摘要 本周学习了多视角自注意力网络,在统一的框架下联合学习输入句子的不同语言学方面。具体来说&#x…...
人工智能|机器学习——DBSCAN聚类算法(密度聚类)
1.算法简介 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,簇集的划定完全由样本的聚集程度决定。聚集程度不足以构成簇落的那些样本视为噪声点,因此DBSCAN聚类的方式也可以用于异常点的检测。 2.算法原…...
Excel F4键的作用
目录 一. 单元格相对/绝对引用转换二. 重复上一步操作 一. 单元格相对/绝对引用转换 ⏹ 使用F4键 如下图所示,B1单元格引用了A1单元格的内容。此时是使用相对引用,可以按下键盘上的F4键进行相对引用和绝对引用的转换。 二. 重复上一步操作 ⏹添加或删除…...
前端实现跨域的六种解决方法
本专栏是汇集了一些HTML常常被遗忘的知识,这里算是温故而知新,往往这些零碎的知识点,在你开发中能起到炸惊效果。我们每个人都没有过目不忘,过久不忘的本事,就让这一点点知识慢慢渗透你的脑海。 本专栏的风格是力求简洁…...
macOS上实现「灵动岛」效果
自从Apple iPhone推出了「灵动岛」功能后,用户们就被其优雅的设计和强大的功能所吸引。然而,作为macOS用户,我们一直在等待这一功能能够在我们的设备上实现。现在,随着新的应用程序的推出,我们终于可以在我们的Mac上体…...
幕译--本地字幕生成与翻译--Whisper客户端
幕译–本地字幕生成与翻译 本地离线的字幕生成与翻译,支持GPU加速。可免费试用,无次数限制 基于Whisper,希望做最好的Whisper客户端 功能介绍 本地离线,不用担心隐私问题支持GPU加速支持多种模型支持(中文、英语、日…...
链表基础知识详解
链表基础知识详解 一、链表是什么?1.链表的定义2.链表的组成3.链表的优缺点4.链表的特点 二、链表的基本操作1.链表的建立2.链表的删除3.链表的查找4.链表函数 一、链表是什么? 1.链表的定义 链表是一种物理存储单元上非连续、非顺序的存储结构…...
GPT-prompt大全
ChatGPT目前最强大的的工具是ChatGPT Plus,不仅训练数据更新到了2023年,而且还可以优先访问新功能。对于程序员来说,升级到ChatGPT Plus,将会带来更多的便利和效率提升。 根据 升级ChatGPT Plus保姆级教程,1分钟就可以…...
的发射点2
☞ 通用计算机启动过程 1️⃣一个基础固件:BIOS 一个基础固件:BIOS→基本IO系统,它提供以下功能: 上电后自检功能 Power-On Self-Test,即POST:上电后,识别硬件配置并对其进行自检,…...
3步搞定绝地求生压枪难题:罗技鼠标宏让你的射击更稳定
3步搞定绝地求生压枪难题:罗技鼠标宏让你的射击更稳定 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 还在为绝地求生中AKM的后坐力而…...
【RAG架构剖析】从原始论文到实战:解析检索增强生成的核心组件与协同机制
1. RAG架构的诞生背景与核心价值 想象一下你正在参加一场知识竞赛,主持人问了一个冷门问题:"19世纪法国印象派画家的代表作品有哪些?"如果只靠大脑记忆,你可能只能说出莫奈的《睡莲》。但如果你手边有本艺术史百科全书&…...
Blender化学品插件终极指南:从零开始创建专业3D分子模型
Blender化学品插件终极指南:从零开始创建专业3D分子模型 【免费下载链接】blender-chemicals Draws chemicals in Blender using common input formats (smiles, molfiles, cif files, etc.) 项目地址: https://gitcode.com/gh_mirrors/bl/blender-chemicals …...
零基础用AI建站工具:10分钟从注册到网站上线的极速实操教程
痛点共情:代码恐惧症?别怕,现在建站只需要会“说话”你是不是觉得建网站是程序员的事,自己完全是个门外汉?看着那些复杂的后台、代码和术语,头都大了。心里想建个官网,却因为不懂技术࿰…...
Excel甘特图实战:从数据到自动报表的一站式解决方案
1. 为什么你需要Excel甘特图? 每次接手新项目时,最头疼的就是如何让团队成员清晰了解任务排期。我曾经用文字描述项目计划,结果开发同事反复确认时间节点;也试过用PPT画进度条,但每次调整都要重做所有图示。直到发现Ex…...
幼儿园自主游戏:核心内涵、实践体系与发展价值
幼儿园自主游戏是幼儿在安全环境下,依兴趣自主选择内容、材料、伙伴与玩法,自发探索、自由表达的主体性活动,是学前教育的基本形态与幼儿发展的核心路径。它彻底区别于教师主导的指令式游戏,核心是尊重幼儿主体地位,让…...
DeepSeek-R1-Distill-Qwen-7B入门实战:从零开始搭建推理环境
DeepSeek-R1-Distill-Qwen-7B入门实战:从零开始搭建推理环境 1. 环境准备与快速部署 1.1 系统要求 在开始部署DeepSeek-R1-Distill-Qwen-7B模型前,请确保您的系统满足以下基本要求: 操作系统:推荐使用Linux系统(Ub…...
AutoLisp实战:从零到一构建你的第一个绘图工具
1. 为什么选择AutoLisp来自动化绘图 如果你经常使用AutoCAD进行绘图工作,一定会遇到大量重复性的操作。比如每次都要手动选择两点画线,然后再单独添加标注。这种机械劳动不仅效率低下,还容易出错。AutoLisp就是AutoCAD内置的解决方案…...
ai智能电话机器人,自动筛选精准意向客户
机器人打电话软件代替人工自动打电话,通话过程中会根据客户的意向等级进行ABCD分类,并通过语音和文字的方式保存与客户的通话过程。打出来意向客户实时推送到业务人员手机上,后续方便销售人员为第二次沟通做准备。1 5 1 364 537 21。1、自动呼…...
微服务系列(一) 我们的WMS单体应用终于扛不住了
我们的 WMS 单体应用,终于扛不住了副标题:从一个 200 万行代码的 Spring Boot 项目说起一、那个让人崩溃的周五 你有没有经历过这种周五? 去年双十一前夜,我们团队还在加班。产品经理急匆匆地跑来:“出库规则要改&…...
