【设计模式】第17节:行为型模式之“解释器模式”

news2024/11/21 0:26:12

一、简介

解释器模式为某个语言定义它的语法(或者叫文法)表示,并定义一个解释器用来处理这个语法。

二、适用场景

  • 领域特定语言
  • 复杂输入解释
  • 可扩展的语言结构

三、UML类图

请添加图片描述

四、案例

对输入的特定格式的打印语句进行解析并执行。

package main

import (
	"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 int
	Expression  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()
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1149477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3D模型格式转换工具HOOPS Exchange:更快、更准确的CAD数据转换工具

HOOPS Exchange是一个开发平台&#xff0c;可以帮助快速开发高性能&#xff0c;跨平台的工程应用程序&#xff0c;是一款更快、更准确的CAD数据转换工具包&#xff0c;是3D数据格式转换首选解决方案。 ▷ 工业级3D数据格式转换 通过单个界面即可读取和写入30多种CAD文件格式&…

虚拟人裸眼3D动画宣传片:品牌营销的流量密码

在数字化转型的大背景下&#xff0c;行业竞争越来越激烈&#xff0c;品牌迫切需要一种新颖的、差异化的宣传片方式提升流量。而依靠户外大屏播放的虚拟人裸眼3D动画宣传片&#xff0c;具有强地标性和网红属性&#xff0c;成为推动文旅、城市营销、品牌营销的重要渠道。 虚拟人裸…

PWA 是属于谷歌的“小程序”!有哪些核心技术

在国内由于小程序的风生水起&#xff0c;PWA 应用在国内的状况一直都不是很好&#xff0c;PWA 和小程序有很多的相似性&#xff0c;但是 PWA 是由谷歌发起的技术&#xff0c;小程序是微信发起的技术&#xff0c;所以小程序在国内得到了大力的扶持&#xff0c;很快就在国内技术界…

Day 3 登录页以及路由 (一)

登录页以及路由 需求 作为一个后台管理系统&#xff0c;登录页是必不可少的。登录页的需求也很简单&#xff0c;输入账号密码&#xff0c;有登录、重置按钮即可。主要界面类似这种&#xff1a; 登录提交到后台&#xff0c;校验成功后&#xff0c;跳转到系统主页。 另外一个需…

Spring MVC的常用注解(接收请求数据篇)

目录 RequestMapping 例子&#xff1a; RequestMapping 支持什么类型的请求 使 RequestMapping 只支持特定的类型 RestController 通过 HTTP 请求传递参数给后端 1.传递单个参数 注意使⽤基本类型来接收参数的情况 2.传递多个参数 3.传递对象 4.RequestParam 后端参数…

分布式:一文吃透分布式锁,Redis/Zookeeper/MySQL实现

目录 一、项目准备spring项目数据库 二、传统锁演示超卖现象使用JVM锁解决超卖解决方案JVM失效场景 使用一个SQL解决超卖使用mysql悲观锁解决超卖使用mysql乐观锁解决超卖四种锁比较Redis乐观锁集成Redis超卖现象redis乐观锁解决超卖 三、分布式锁概述四、Redis分布式锁实现方案…

Threejs 三维开发系列之Threejs基础概念

Threejs简介(是什么)Threejs是一个web端的3D图形引擎&#xff0c;能利用js创建和控制各种三维模型和场景(能用来做什么)可以用js开发各种复杂的三维场景、空间模型动画展示、各种三维小游戏(比如微信跳一跳就是Threejs开发)。(优势) 传统三维开发一般是c openGl&#xff0c;开发…

计算机考研 | 2014年 | 计算机组成原理真题

文章目录 【计算机组成原理2014年真题44题-12分】【第一步&#xff1a;信息提取】【第二步&#xff1a;具体解答】 【计算机组成原理2014年真题45题-8分】【第一步&#xff1a;信息提取】【第二步&#xff1a;具体解答】 【计算机组成原理2014年真题44题-12分】 &#xff08;1&…

SAML- 安全断言标记语言

一、概念 安全断言标记语言&#xff08;SAML&#xff09;是一种开放标准&#xff0c;用于在各方之间&#xff08;特别是身份提供商和服务提供商之间&#xff09;交换身份验证和授权数据。SAML 是一种基于XML的安全断言标记语言&#xff08;服务提供商用来做出访问控制决策的语句…

OpenCV—自动驾驶实时道路车道检测(完整代码)

自动驾驶汽车是人工智能领域最具颠覆性的创新之一。在深度学习算法的推动下,它们不断推动我们的社会向前发展,并在移动领域创造新的机遇。自动驾驶汽车可以去传统汽车可以去的任何地方,并且可以完成经验丰富的人类驾驶员所做的一切。但正确地训练它是非常重要的。自动驾驶汽…

MaxQuant的安装和使用(linux)

安装 conda create -n maxquant conda activate maxquant conda install -c bioconda maxquantmaxquant --help # 查看命令行参数用法 MaxQuant goes Linux 2018年&#xff0c;作者发布了MaxQuant的linux版本&#xff08;1.6.1.0&#xff09;。该版本主要依赖mono。

这三个视频解析工具,谁看了不说好用?

在这个自媒体时代&#xff0c;很多小伙伴都有下载视频的需求&#xff0c;今天就来给大家分享三个视频下载解析工具&#xff0c;不仅操作简单&#xff0c;而且十分高效&#xff0c;谁用谁知道&#xff01; 一、WeDown 一个在线视频下载网站&#xff0c;支持直接复制视频地址链接…

使用Python编写多因子量化策略详解

概要 多因子量化策略是一种基于股票市场因子进行量化分析的投资策略。该策略基于多个因子模型并结合市场数据&#xff0c;通过计算每支股票的综合得分并以此为基础进行股票的选取和权重分配。在本篇文章中&#xff0c;我们将介绍如何使用Python编写多因子量化策略。 数据收集…

【年终特惠】基于最新导则下生态环评报告编制技术暨报告篇、制图篇、指数篇、综合应用篇系统性实践技能提升

根据生态环评内容庞杂、综合性强的特点&#xff0c;依据生态环评最新导则&#xff0c;将内容分为4大篇章(报告篇、制图篇、指数篇、综合篇)、10大专题(生态环评报告编制、土地利用图的制作、植被类型及植被覆盖度图的制作、物种适宜生境分布图的制作、生物多样性测定、生物量及…

php yield定义生成器,加快foreach、for等循环速度

yield关键字用于定义生成器函数。生成器函数可以一次生成一个值&#xff0c;并在每次生成值后暂停其执行&#xff0c;直到请求下一个值。这使得生成器可以有效地处理大量数据或无限数据流 不使用yield使用yield执行方式函数会立即执行&#xff0c;并一次性返回所有结果。函数执…

【CPP】类和对象

1- Classes and Objects Structures A struct in C is a type consisting of a sequence of data membersSome functions/Statements are needed to operate the data members of an object of a struct type 不不小心操作错误&#xff0c;不小心越界 Classes You should b…

五分钟理解Java跨平台原理(适合小白)

JVM通俗的理解 Java语言的一个非常重要的特点就是与平台的无关性。而使用Java虚拟机&#xff0c;即JVM&#xff08;Java Virtual Machine&#xff09;是实现这一特点的关键。JVM是一种用于计算设备的规范&#xff0c;它是一个虚构出来的计算机&#xff0c;是通过在实际的计算机…

SMART PLC梯形速度曲线轨迹规划(追剪从轴控制)

在介绍本专栏之前,大家可以参考另一篇博图PLC的梯形加减速点动功能块介绍文章 梯形加减速点动功能块(博途SCL)_RXXW_Dor的博客-CSDN博客文章浏览阅读184次。SMART PLC斜坡函数SMART PLC斜坡函数功能块(梯形图代码)_RXXW_Dor的博客-CSDN博客斜坡函数Ramp的具体应用可以参看下…

vue3+element-plus 表格全选和跨页勾选,以及全选全部功能

目录 背景描述 实现效果 详细开发 1.模拟数据和页面布局 2.跨页勾选和点击勾选功能 3.表头全选 4. 全选全部 &#xff08;1&#xff09;全选后禁用表格勾选&#xff08;简单&#xff09; &#xff08;2&#xff09;真正意义上的全选全部&#xff08;难&#xff09; 总…

「Eolink Apikit 教程」如何快速创建有效的API监控任务?

API 监控能够确保 API 的稳定性。如果一个 API 出现故障或崩溃&#xff0c;它可能会导致整个应用程序无法正常工作。这对用户和业务来说可能是灾难性的。通过监控 API&#xff0c;开发团队可以及时发现问题并采取措施来修复它们&#xff0c;从而降低应用程序中断的风险。 作为…