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

顺德顺的网站建设域名流量查询工具

顺德顺的网站建设,域名流量查询工具,海东高端网站建设价格,网站排名提高目录 一、 啥是解释器模式?二、 为什么要用解释器模式?三、 解释器模式的实现方式四、 解释器模式的优缺点五、 解释器模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,…

在这里插入图片描述

目录

    • 一、 啥是解释器模式?
    • 二、 为什么要用解释器模式?
    • 三、 解释器模式的实现方式
    • 四、 解释器模式的优缺点
    • 五、 解释器模式的应用场景
    • 六、 总结

🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!
🌟了解备忘录模式请看: (二 十 二)趣学设计模式 之 备忘录模式!

这篇是设计模式专栏的最后一篇了,更多设计模式文章请看专栏 : ✨设计模式专栏
其他优质专栏: 【🎇SpringBoot】【🎉多线程】【🎨Redis】…等

如果喜欢作者的讲解方式,可以点赞收藏加关注,你的支持就是我的动力
✨更多文章请看个人主页: 码熔burning

一、 啥是解释器模式?

想象一下,你正在开发一个简单的计算器 🧮,你需要解析用户输入的算术表达式,比如 “1 + 2 * 3” ➕。 你需要将这个表达式分解成不同的部分,然后根据这些部分来计算结果。

解释器模式,给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子! 简单来说,就是定义一种语法规则,然后创建一个解释器来解析符合这种规则的语句 🗣️。

简单来说,就是创建一个“计算引擎”,将算术“表达式”翻译成计算机可以理解的计算指令! 🗣️+💻

  • 你需要定义一种简单的语言: 就像你需要定义算术表达式的语法 ➕!
  • 你需要解析这种语言的语句: 就像你需要解析 “1 + 2 * 3” 这个表达式 🧮!
  • 你需要根据解析结果执行相应的操作: 就像你需要根据表达式计算出结果 7 ➗!

二、 为什么要用解释器模式?

用解释器模式,好处多多 👍:

  • 易于扩展: 可以很容易地添加新的运算符 ➕!
  • 灵活性高: 可以灵活地组合不同的运算符 🤸!
  • 易于实现: 对于简单的表达式,实现起来比较容易 ✍️!

三、 解释器模式的实现方式

解释器模式主要包含以下几个角色:

  • 抽象表达式(AbstractExpression): 声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享 🌳。
  • 终结符表达式(TerminalExpression): 实现与文法中的终结符相关联的解释操作。一个句子中的每个终结符需要该类的一个实例 📍。
  • 非终结符表达式(NonterminalExpression): 实现与文法中的非终结符相关联的解释操作。句子中的每条规则需要该类的一个实例 🔗。
  • 上下文(Context): 包含解释器之外的一些全局信息 🌍。
  • 客户端(Client): 构建表示特定句子的抽象语法树。然后调用解释操作 🧑‍💻。

代码示例:

import java.util.HashMap;
import java.util.Map;// 抽象表达式:算术表达式
interface Expression {int interpret(Map<String, Integer> variables); // 解释
}// 终结符表达式:数字
class NumberExpression implements Expression {private int number; // 数字public NumberExpression(int number) {this.number = number;}@Overridepublic int interpret(Map<String, Integer> variables) {return number;}
}// 终结符表达式:变量
class VariableExpression implements Expression {private String name; // 变量名public VariableExpression(String name) {this.name = name;}@Overridepublic int interpret(Map<String, Integer> variables) {if (!variables.containsKey(name)) {return 0; // 默认值为 0}return variables.get(name);}
}// 非终结符表达式:加法
class AddExpression implements Expression {private Expression left; // 左表达式private Expression right; // 右表达式public AddExpression(Expression left, Expression right) {this.left = left;this.right = right;}@Overridepublic int interpret(Map<String, Integer> variables) {return left.interpret(variables) + right.interpret(variables);}
}// 非终结符表达式:减法
class SubtractExpression implements Expression {private Expression left; // 左表达式private Expression right; // 右表达式public SubtractExpression(Expression left, Expression right) {this.left = left;this.right = right;}@Overridepublic int interpret(Map<String, Integer> variables) {return left.interpret(variables) - right.interpret(variables);}
}// 客户端
public class Client {public static void main(String[] args) {// 表达式:x + y - 10VariableExpression x = new VariableExpression("x");VariableExpression y = new VariableExpression("y");NumberExpression ten = new NumberExpression(10);Expression expression = new SubtractExpression(new AddExpression(x, y), ten);// 上下文:变量赋值Map<String, Integer> variables = new HashMap<>();variables.put("x", 5);variables.put("y", 8);// 解释表达式int result = expression.interpret(variables);System.out.println("表达式: x + y - 10");System.out.println("x = 5, y = 8");System.out.println("结果:" + result);}
}

分析:

  • Expression 是抽象表达式,定义了 interpret 方法,用于解释表达式。
  • NumberExpressionVariableExpression 是终结符表达式,分别代表数字和变量,实现了 interpret 方法,用于返回数字的值和变量的值。
  • AddExpressionSubtractExpression 是非终结符表达式,分别代表加法和减法,实现了 interpret 方法,用于计算加法和减法的结果。

完整的输出结果:

表达式: x + y - 10
x = 5, y = 8
结果:3

四、 解释器模式的优缺点

优点:

  • 易于扩展 ➕!
  • 灵活性高 🤸!
  • 易于实现 ✍️!

缺点:

  • 对于复杂的语法,实现起来比较困难 🤯!
  • 执行效率较低 🐌!
  • 难以维护(当语法规则变得复杂时) 🚧!

五、 解释器模式的应用场景

  • 需要定义一种简单的语言: 就像你需要定义算术表达式的语法 ➕!
  • 需要解析这种语言的语句: 就像你需要解析 “1 + 2 * 3” 这个表达式 🧮!
  • 需要根据解析结果执行相应的操作: 就像你需要根据表达式计算出结果 7 ➗!
  • 例如:SQL 解析、正则表达式、编译器等 💻!

六、 总结

  • 解释器模式就像创建一个“计算引擎”,将算术“表达式”翻译成计算机可以理解的计算指令! 🗣️+💻
  • 优点是易于扩展、灵活性高、易于实现! 👍
  • 缺点是对于复杂语法实现困难、执行效率低、难以维护! 👎
  • 适用于需要定义一种简单的语言,并解析这种语言的语句的场景! 🎯

希望这个例子能让你彻底理解解释器模式! 💯 祝你学习愉快! 😄

http://www.dtcms.com/a/456416.html

相关文章:

  • 弹幕网站开发难么网站免费网站app
  • 福建省建设工程继续教育网站wordpress图片七牛存储
  • 网站建设php文件html文件wordpress 修改链接
  • 微网站定制品牌宣传文案范文
  • 英迈思网站做不下去可以退款吗潍坊做网站建设的公司
  • 在线做炫图网站网站建设300
  • 潍坊企业网站建设外贸营销网站怎么建设
  • 怎样注册电商网站山东东方路桥建设总公司官方网站
  • 制作网站的代码wordpress4.9.6漏洞
  • 隆回网站建设制作网站关闭模板
  • 北京网站设计首选 新鸿儒举报网站建设公司
  • 前端网站论文小说百度风云榜
  • 建站系统破解虚拟主机部署网站
  • 网站seo和sem是什么意思三门峡网站开发
  • 多模室内设计网站域名如何购买
  • 免费一站式网站建设C语言也能干大事网站开发pdf
  • 兴义市住房城乡建设局网站html网站正在建设源码
  • 网站设计和策划的步骤是什么北京seo
  • 怎么用dw英文版做网站宁波网站制作公司
  • 个人免费发布信息胶州网站优化
  • 网站开发年收入做网站要学什么东西
  • 沈阳手机端建站模板阿里云网站301重定向怎么做
  • 南昌网站建设冲浪者如何制作网站地图
  • dede学校网站免费源码有哪些官网做的比较好的网站
  • wordpress水煮鱼网站seo公司哪家好
  • 如何做招聘网站的方案新闻发稿渠道
  • 购买了个网站源码 怎么建立建设银行网站无法打开
  • 福州网站建设熊掌号seo3立体构型
  • 电子商务网站会员体系比较顺口的建筑公司名字
  • 网站设计哪家强免费手机网页网站