【设计模式】第17节:行为型模式之“解释器模式”
一、简介
解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。
二、适用场景
- 领域特定语言
- 复杂输入解释
- 可扩展的语言结构
三、UML类图

四、案例
对输入的特定格式的打印语句进行解析并执行。
package mainimport ("fmt""strconv""strings"
)type Expression interface {Interpret()
}type PrintExpression struct {Message string
}func NewPrintExpression(msg string) *PrintExpression {return &PrintExpression{Message: msg}
}func (pe *PrintExpression) Interpret() {fmt.Printf("message: %v\n", pe.Message)
}type RepeatExpression struct {RepeatCount intExpression Expression
}func NewRepeatExpression(repeatCount int, expression Expression) RepeatExpression {return RepeatExpression{RepeatCount: repeatCount, Expression: expression}
}func (re *RepeatExpression) Interpret() {for i := 0; i < re.RepeatCount; i++ {re.Expression.Interpret()}
}func main() {command := "REPEAT 3 TIMES: PRINT Hello"words := strings.Split(command, " ")fmt.Printf("words: %v\n", words)if words[0] == "REPEAT" {repeatCount, _ := strconv.Atoi(words[1])printExpression := NewPrintExpression(words[4])repeatExpression := NewRepeatExpression(repeatCount, printExpression)repeatExpression.Interpret()}
}
相关文章:
【设计模式】第17节:行为型模式之“解释器模式”
一、简介 解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。 二、适用场景 领域特定语言复杂输入解释可扩展的语言结构 三、UML类图 四、案例 对输入的特定格式的打印语句进行解析并执行。 packag…...
各传输介质详细知识点
一.百兆网传输介质 快速以太网(802.3u) 100Base-T2 电缆:2对3类UTP 最大段长:100m 特性阻抗:100 100Base-T4 电缆:4对3类UTP 最大段长:100m 特点:8B/6T,NRZ编码 特性阻抗:1…...
历史随想随记
古往今来所有的王侯将相如不都成为人们茶余饭后的笑谈,一个人无论多么厉害,多么聪明,多么奸诈,多么有权势,他们都逃不出一个结局——死亡,我觉得这是人生最大的悲哀。看历史看的多了,就会发现这…...
ClickHouse Java多个参数的UDF编写
一、环境版本 环境版本docker clickhouse22.3.10.22 docker pull clickhouse/clickhouse-server:22.3.10.22二、XML配置 2.1 配置文件 # 创建udf配置文件 vim /etc/clickhouse-server/demo_function.xml<functions><function><type>executable</type&…...
RPA除了和OCR、NLP技术结合,还能和什么技术结合?
鉴于业内现在也经常把RPA称为数字员工,就虚拟一个人的形象来解答吧。 首先是头部,实现人的“听看说想”能力: 听:ASR(语音识别技术),主要用于听取和理解语音输入,让RPA能处理语音数…...
AssertionError: Torch not compiled with CUDA enabled
Pytorch和CUDA版本不兼容,运行python后(终端输入python回车)用以下代码测试 import torch print(torch.__version__) print(torch.cuda.is_available())返回False则说明目前的pytorch版本无法使用显卡,如下图所示 接着重装合适版…...
【Ubuntu 系统使用进入,自动进入base虚拟环境解决最全】
项目场景: 在Ubuntu上安装完anaconda后,发现每次打开终端后都会自动进入到base的虚拟环境中去,虽然在这些环境下使用问题不大,但一些软件的安装在虚拟环境下有影响。每次使用conda deactivate退出也很麻烦。 问题描述 安装玩之…...
C++项目——云备份-⑨-服务端与客户端功能联调
文章目录 专栏导读1.服务端源代码2.客户端源代码3.浏览器访问测试//listshow 4.上传文件测试5.文件下载测试 专栏导读 🌸作者简介:花想云 ,在读本科生一枚,C/C领域新星创作者,新星计划导师,阿里云专家博主&…...
Linux两条服务器实现相互免密登录
1.准备两台虚拟机,一台充当服务器端(server),一台充当客户端(client) 服务器端(server):192.168.75.139 客户端(client):192.168.75…...
华纳云Ubuntu环境怎么编译安装PHP和Nginx
在Ubuntu环境中编译安装PHP和Nginx需要进行一系列步骤。以下是安装PHP和Nginx的一般过程: 1. 更新系统: 首先,确保您的系统是最新的,运行以下命令更新软件包列表和已安装的软件包: sudo apt update sudo apt upgra…...
Ubuntu 23.10(Mantic Minotaur)正式发布,支持Linux 6.5和GNOME 45
导读Canonical 近日正式发布了 Ubuntu 23.10(Mantic Minotaur)操作系统,其中包含一些最新的 GNU/Linux 技术、改进的硬件支持以及许多其他变化。 Ubuntu 23.10 采用了最新的 Linux 6.5 内核系列,并为 Ubuntu 桌面和服务器增强了 z…...
Linux:KVM虚拟化
本章操作基于centos7系统 简介 KVM是Kernel Virtual Machine的简写,目前Redhat只支持在64位的Rhel5.4以上的系统运行KVM,同时硬件需要支持VT技术。KVM的前身是QEMU,在2008年被redhat公司收购并获得了一项hypervisor技术,不过redh…...
HTML标签,列表,表格相关
HTML标签的分类 HTML标签可以分为以下几类: 标题标签:用于定义网页的标题,分为h1、h2、h3、h4、h5和h6。 段落标签:用于定义文本的段落,常用的有p标签。 链接标签:用于定义链接,常用的有a标签…...
【音视频】Linux | FFmpeg源码搭建
Linux | FFmpeg源码搭建 时间:2023-06-21 文章目录 `Linux` | `FFmpeg`源码搭建@[toc]1.参考2.获取源码2-1.建立工作目录2-2.获取`AAC`2-3.获取`X264`2-4.获取`X265`2-5.获取`FFmpeg`3.编译/安装3-1.编译`AAC`3-1-1.解压源码3-1-2.编译3-1-3.安装3-2.编译`X264`3-2-1.解压源码…...
Ansible中常用模块
1.ansible实现管理的方式 Ad-Hoc //利用ansible命令直接完成管理,主要用于临时命令使用场景 playbook //ansible脚本,主要用于大型项目场景,需要前期的规划 2.Ad-Hoc执行方式中如何获得帮助 ansible-doc …...
2000-2021年上市公司产融结合度量数据
2000-2021年上市公司产融结合度量数据 1、时间:2000-2021年 2、指标:股票代码、年份、是否持有银行股份、持有银行股份比例、是否持有其他金融机构股份、产融结合 3、来源:上市公司年报 4、范围:上市公司 5、样本量ÿ…...
2023最新最全Web自动化测试面试题
1、Selenium 中 hidden 或者是 display none 的元素是否可以定位到? 不可以。可以写 JavaScript 将标签中的 hidden 先改为 0,再进行定位元素。 2、Selenium 中如何保证操作元素的成功率?也就是说如何保证我点击的元素一 定是可以点击的&am…...
List的add(int index,E element)陷阱,不得不防
项目场景: 项目中有两个List列表,一个是List1用来存储一个标识,后续会根据这个标识去重。 一个List2是用来返回对象的,其中对象里也有一个属性List3。现需要将重复的标识数据追加到List3 我想到的两个方案: 尽量不动…...
如何使用drawio画流程图以及导入导出
画一个基本的流程图 你可以在线使用drawio, 或者drawon创建很多不同类型的图表。 如何使用编辑器,让我们以一个最基本的流程图开始。 流程图,就是让你可视化的描述一个过程或者系统。 图形和很少部分的文字表达就可以让读者很快的理解他们需要什么。 创…...
腾讯云轻量服务器“镜像类型”以及“镜像”选择方法
腾讯云轻量应用服务器镜像类型分为应用镜像、系统镜像、Docker基础镜像、自定义镜像和共享镜像,腾讯云百科txybk.com来详细说下不同镜像类型说明和详细介绍: 轻量应用服务器镜像类型说明 腾讯云轻量应用服务器 应用镜像:独有的应用镜像除了包…...
4 种可靠的 OPPO 手机联系人备份到电脑的方法
OPPO 手机的全球出货量常年位居前五,足以见得它已经获得了越来越多用户的认可。对于年轻群体而言,入手一款高性价比的 OPPO Reno4 SE 这类机型是非常不错的选择。但日常使用中,误操作、进水等意外都可能导致数据丢失,为了避免这类…...
寻音捉影·侠客行多场景落地:覆盖会议/媒体/司法/金融/教育五大垂直领域
寻音捉影侠客行多场景落地:覆盖会议/媒体/司法/金融/教育五大垂直领域 1. 产品核心功能解析 寻音捉影侠客行是一款基于先进语音识别技术的音频关键词检索工具,它能够像江湖中的隐士高手一样,在浩瀚的音频海洋中精准定位特定关键词。这款工具…...
Wireshark抓包实战:DHCP协议交互全流程解析(附常见问题排查)
Wireshark深度解析:DHCP协议交互全流程与实战排错指南 从零开始理解DHCP协议的本质 想象一下,当你带着笔记本电脑走进一家咖啡馆,连接Wi-Fi的瞬间,设备就自动获得了上网所需的所有配置——IP地址、子网掩码、默认网关、DNS服务器。…...
雷电模拟器装Magisk后,自带的文件管理器为啥打不开/data?用MT管理器一招搞定
雷电模拟器Magisk环境下文件管理器的权限困局与实战解决方案 当你在雷电模拟器中成功安装Magisk后,可能会遇到一个令人困惑的现象:原本可以自由访问系统目录的自带文件管理器,突然对/data和/system等关键路径"视而不见"。这并非模拟…...
YimMenu安全增强指南:四阶法实现GTA V体验升级
YimMenu安全增强指南:四阶法实现GTA V体验升级 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu …...
Qt与MongoDB的C++实战:从基础连接到图像数据存储
1. 为什么选择Qt与MongoDB组合 在开发需要处理大量非结构化数据的应用时,传统关系型数据库往往会遇到性能瓶颈。我曾经在一个智能安防项目中,需要存储和分析数万张人脸识别图片,正是这个需求让我深入研究了Qt与MongoDB的组合方案。 MongoDB作…...
Redis监听Key过期事件报错?教你两种绕过CONFIG命令的实用方案
Redis监听Key过期事件的两种安全实践方案 Redis的Key过期事件监听是许多业务场景中的核心需求,比如订单超时处理、会话管理、缓存刷新等。但在云服务环境中,开发者常会遇到ERR unknown command CONFIG的报错,这通常是因为云服务提供商出于安全…...
深度解析DiffSinger:基于扩散模型的AI歌声合成技术革命
深度解析DiffSinger:基于扩散模型的AI歌声合成技术革命 【免费下载链接】DiffSinger 项目地址: https://gitcode.com/gh_mirrors/dif/DiffSinger 在当今AI音乐创作领域,DiffSinger歌声合成技术正引领着一场声音生成的技术革命。这个由OpenVPI维护…...
OpenClaw对接Qwen3-32B-Chat私有镜像:RTX4090D本地部署全流程
OpenClaw对接Qwen3-32B-Chat私有镜像:RTX4090D本地部署全流程 1. 为什么选择本地私有化部署? 去年冬天,当我第一次尝试用OpenClaw自动化处理周报时,发现公有云API的响应延迟和隐私顾虑成了瓶颈。直到在星图镜像广场发现Qwen3-32…...
macOS Unlocker V3.0:在Windows和Linux上免费运行macOS虚拟机的终极解决方案 [特殊字符]
macOS Unlocker V3.0:在Windows和Linux上免费运行macOS虚拟机的终极解决方案 🚀 【免费下载链接】unlocker 项目地址: https://gitcode.com/gh_mirrors/unlo/unlocker macOS Unlocker V3.0是一款革命性的开源工具,让您能够在Windows或…...
