当前位置: 首页 > news >正文

java 设计模式_行为型_18解释器模式

18.解释器模式
解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。

解释器模式在我们开发过程中并不常用,是个比较小众的设计模式。这种模式通常被用在 SQL 解析、符号处理引擎等。

什么是符号处理引擎呢?举几个例子,

强大而又令人望而却步的正则表达式,相信大多数程序猿都接触过吧,[0-9a-zA-Z]+这样一串符号就能够匹配一个由数字和大小写字母组成的字符串。类似的还有XML文件的解析、SQL语句的解析等等。
假设你做了一个机器人,可以通过指令告诉它如何执行动作,比如向前走10个单位是forward 10,向左转是turn left,当你输入begin forward 10 turn left forward 5 end 组成的命令给它的终端,它就能明白命令的意思(向前走10个单位然后左转走5个单位)并执行。
在举个简单点的例子,正则表达式,我们通常用的计算器是一步一步来的,比如2+3-4/2=当输入+、-``/和=的时候都会立即响应。但是还有种计算器,可以在输入整个公式后,一并进行计算,这种计算器可以直接输入2+3-4/2然后回车后直接给出整个式子的结果,这种计算器就是“解释型”计算器。

UML用例图:
在这里插入图片描述

一、先声明一个解释型接口

public interface Expression {double interpret();
}

二、终结符表达式

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Num implements Expression {private double number;@Overridepublic double interpret() {return number;}
}

三、非终结符表达式(分别对应加减乘除)

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Add implements Expression {private Expression left,right;@Overridepublic double interpret() {return left.interpret()+right.interpret();}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Sub implements Expression {private Expression left,right;@Overridepublic double interpret() {return left.interpret()-right.interpret();}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Mul implements Expression {private Expression left,right;@Overridepublic double interpret() {return left.interpret()*right.interpret();}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Div implements Expression {private Expression left,right;@Overridepublic double interpret() {return left.interpret()/right.interpret();}
}

四、测试类

public class InterpretTest {public static void main(String[] args) {Expression a = new Num(2),b=new Num(3),c=new Num(4),d=new Num(2);Expression result = new Sub(new Add(a,b),new Div(c,d));System.out.println(result.interpret());}
}

相关文章:

  • Spring AI 对话记忆持久化实战-MySQL方案
  • vscode-monitor-pro | 提升开发效率的利器
  • leetcode23-合并K个升序链表
  • Day01_刷题niuke20250615
  • 【Flutter】解决小米澎湃系统迷你窗口、缩小窗口后界面空白问题
  • linux 常用工具的静态编译之二
  • 算法导论第七章:快速排序的艺术与科学
  • 【git】如何在team里使用公共账号进行ssh clone
  • 《Vuejs设计与实现》第 9 章(简单 diff 算法)
  • java中常见的排序算法设计介绍
  • 键盘效率提升实战,快速训练指法与速度
  • SPOJ-TEST
  • NodeJS的fs模块的readFile和createReadStream区别以及常见方法
  • 区间交集:区间选点
  • LangGraph--Agent常见的模式2(并行、数据路由)
  • PaddleOCR项目实战(3):SpringBoot服务开发之全局异常处理
  • Appium+python自动化(二十四) - 元素等待
  • Spark简介脑图
  • 浏览器的事件循环和NodeJS的事件循环有什么区别
  • 【Erdas实验教程】023:遥感图像辐射增强(直方图匹配)
  • 制作网站背景怎么做/网站访问量统计工具
  • 建设电商网站流程/新媒体营销推广方案
  • 网站做代练/律师网络推广
  • 小说网站系统怎么做/上海关键词排名手机优化软件
  • 网站制作网页/网站搜索查询
  • 如何引流与推广/企业关键词优化专业公司