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

烟台开发区人才网招聘信息油烟机seo关键词

烟台开发区人才网招聘信息,油烟机seo关键词,网站二级域名如何设置,网页设计与制作题库与答案阅读建议 嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议: 本篇文章大概5000多字,预计阅读时间长需要5分钟。本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章&#x…

阅读建议

嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议:

  1. 本篇文章大概5000多字,预计阅读时间长需要5分钟。
  2. 本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章,建议收藏起来,方便时常学习与回顾,温故而知新。
  3. 创作不易,免费的点赞、关注,请走上一走,算是对博主一些鼓励,让我更有动力输出更多的干货内容。

什么是解释器模式

        解释器模式(Interpreter Pattern)是一种行为型设计模式,给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例,其核心原理是将一个语言表达式表示为一个抽象语法树,然后定义解释器来遍历这棵语法树并执行相应的操作。

        是的,没有看错,这就是解释器模式的标准定义,是不是和我一样,看完后完全处于懵逼状态,这里语言是什么?文法又是什么?语法树是什么?解释器是怎么解释句子的?...讲真的,解释器模式确实不太好理解。

        复杂的事情,慢慢来理解,先来弄懂标题解释器是什么意思?

        解释器(Interpreter)是一种电脑程序,能够把高级编程语言一行一行直接转译运行。实际它是一种翻译程序,执行方式是一边翻译一边执行。什么意思呢?再具体来说,比如JavaScript、Python就属于解释型语言,如下面的python代码,打印输出“hello world”,在计算机里是怎么运行呢?首先,计算机能够理解并执行的指令是二进制的,这些高级字符肯定是不直接执行的,因此在执行前,这句代码会通过python环境中的解释器解释成计算机可以理解的二进制指令,如果语法有问题,解释的过程就会出现异常,程序执行会中断。而Java是属于编译型的,什么意思呢?就是先把.java文件编译成.class文件然后再加载到虚拟机执行。

print("Hello, world!")

找到标题的出处后,后面的定义内容就好理解多了。

  • 语言:python就是一门编程语言,汉语就是一门中国人之间直接交流的语言;
  • 文法:就是语法,python有自己语法,遵循语法规范,程序才能正确解释并执行。汉语也有,一般就是主谓宾那一套;
  • 句子:对于python来说,print("Hello, world!"),就一句话。对于汉语来说,“我爱你,中国!”也是一个句子;
  • 语法树:语法树是句子结构的一种树型表示,比如:我爱你,中国!这句话照汉语的语法表示为一个树型结果就是:

解释器模式有哪些核心角色

解释器模式的核心角色主要包括以下四个:

  • 抽象表达式(IExpression):这是解释器模式中的核心接口,负责定义解释方法interpret,交由具体子类进行具体解释。
/*** 抽象表达式*/
public abstract class AbstractExpression {public abstract boolean interpret(String info);
}
  • 终结符表达式(TerminalExpression):这是抽象表达式的子类,实现了与文法中终结符相关的解释操作。通常一个解释器中只有一个终结符表达式,但有多个实例,对应不同的终结符。
/*** 终结符表达式*/
public class TerminalExpression extends AbstractExpression{private String data;public TerminalExpression(String data) {this.data = data;}@Overridepublic boolean interpret(String info) {return info.contains(data);}
}
  • 非终结符表达式(NonterminalExpression):这也是抽象表达式的子类,实现了文法中与非终结符相关的解释操作。
/*** 非终结符表达式*/
public class NonterminalExpression extends AbstractExpression {private AbstractExpression expr1;private AbstractExpression expr2;public NonterminalExpression(AbstractExpression expr1, AbstractExpression expr2) {this.expr1 = expr1;this.expr2 = expr2;}@Overridepublic boolean interpret(String info) {return expr1.interpret(info) || expr2.interpret(info);}
}
  • 上下文环境类(Context):这个类主要用来存放解释器之外的全局信息,一般用来存放文法中各个终结符所对应的具体值。
/*** 上下文环境类*/
public class Context {private AbstractExpression expression;public Context(AbstractExpression expression) {this.expression = expression;}public void  interpret(String info){System.out.println(info);boolean interpret = this.expression.interpret(info);if (interpret) {System.out.println("结束");}}
}
/*** 客户端*/
public class Client {public static void main(String[] args) {AbstractExpression expre1=new TerminalExpression("\n");AbstractExpression expre2=new TerminalExpression("\r");AbstractExpression expre=new NonterminalExpression(expre1,expre2);Context context=new Context(expre);context.interpret("hello ,world!\n");}
}

解释器模式如何实现

需求描述

        这篇文章是设计模式系列的最后一篇,之所以放在最后一篇是因为我觉得理解起来比较困难和抽象。当然,如果你能够跟上我的思路,到这里也许已经明白其中的一二,再举一个实际的例子,来模拟解释器模式的实现,看完之后,也许就全明白了。

        现在直播带货是真的火,有的主播,随随便便一场直播,就够普通打工人干一辈子的了,也正因此,无数人开始蜂拥而入,更有很多人为了圈钱,更是没有底线的蹭热点、制造热点。人多了,那么问题就出现了:在直播间里,有的人比较喜欢这个主播,,则是“我爱你xxx”、“xxx,我支持你”之类的各种弹幕满屏飞,有的人不喜欢这个主播,则是各种诋毁和谩骂,那么如果需要对所有要输出打印到公屏上的弹幕做一个敏感词的过滤,应该怎么做呢?如果使用解释器模式,则可以这样实现:

实现方法

1、AbstractExpression.java:声明一个抽象表达式(IExpression):在抽象类里,定义解释方法interpret,由具体敏感词表达式、非敏感词表达工子类进行具体实现。

/*** 抽象表达式*/
public abstract class AbstractExpression {public abstract boolean interpret(String info);
}

2、SensitiveExpression.java、NonsensitiveExpresson.java:声明具体的敏感词表达式类、非敏感词表达式类,实现具体的解释逻辑;

/*** 敏感词表达式*/
public class SensitiveExpression extends AbstractExpression {private String data;public SensitiveExpression(String data) {this.data = data;}@Overridepublic boolean interpret(String info) {return info.contains(data);}
}
/*** 非敏感词表达式*/
public class NonsensitiveExpression extends AbstractExpression {private AbstractExpression expr1;private AbstractExpression expr2;public NonsensitiveExpression(AbstractExpression expr1, AbstractExpression expr2) {this.expr1 = expr1;this.expr2 = expr2;}@Overridepublic boolean interpret(String info) {return expr1.interpret(info) || expr2.interpret(info);}
}

3、Context.java:上下文环境类(Context),持有具体的表达式实现。

/*** 上下文环境类*/
public class Context {private AbstractExpression expression;public Context(AbstractExpression expression) {this.expression = expression;}public void print(String info) {boolean interpret = this.expression.interpret(info);if (interpret) {System.out.println("忽略敏感词:*****");} else {System.out.println("XXXX说:"+info);}}
}

4、编写业务客户端进行测试验证

/*** 客户端*/
public class Client {public static void main(String[] args) {AbstractExpression expre1=new SensitiveExpression("滚");AbstractExpression expre2=new SensitiveExpression("垃圾");AbstractExpression expre=new NonsensitiveExpression(expre1,expre2);Context context=new Context(expre);context.print("支持主播");context.print("主播垃圾");context.print("主播真漂亮");context.print("主播滚蛋");}
}

解释器模式适用哪些场景

解释器模式的应用场景包括但不限于以下几种情况:

  1. 表达式求值:例如计算器应用、公式计算、数据分析等,解释器可以将表达式解析成计算机可以执行的指令。
  2. 自然语言处理:例如语言翻译、语音识别、虚拟助手等,解释器可以将人类语言翻译成计算机可以识别的语言。
  3. 日志处理:使用脚本语言或编程语言处理日志时,有很多服务会产生大量的日志,需要对日志进行解析,生成报表。各个服务的日志格式不同,数据中的要素相同,这种情况下,通过程序解决上述问题,主要的解决方案就是使用解释器模式。

解释器模式的优点和缺点

优点

  1. 易于改变和扩展文法:由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。
  2. 每一条文法规则都可以表示为一个类:因此可以方便地实现一个简单的语言。
  3. 增加新的解释表达式较为方便:如果用户需要增加新的解释表达式只需要对应增加一个新的终结符表达式或非终结符表达式类,原有表达式类代码无须修改,符合“开闭原则”。

缺点

  1. 对于复杂文法难以维护:在解释器模式中,每一条规则至少需要定义一个类,因此如果一个语言包含太多文法规则,类的个数将会急剧增加,导致系统难以管理和维护。
  2. 执行效率较低:由于在解释器模式中使用了大量的循环和递归调用,因此在解释较为复杂的句子时其速度很慢,而且代码的调试过程也比较麻烦。

总结

总之,在表达式求值、自然语言处理和日志处理等业务场景中,解释器模式可以将人类语言或非编程语言转换为计算机可执行的语言,从而实现对数据的解析、处理和计算等功能,是一种行之有效的设计模式,但是其本身复杂性和核心原理需要特别注意。

http://www.ritt.cn/news/11371.html

相关文章:

  • 网站建设营业执照如何写不受国内限制的浏览器下载
  • 让网站建设便宜到底轻松seo优化排名
  • 常见问题 网站建设安卓排名优化
  • 网站经营许可备案号安卓优化大师破解版
  • 网页制作与网站建设实战大全 pdf百度 营销怎么收费
  • 简单的手机网站模板免费下载电脑培训班价目表
  • 网站建设 模块nba最快的绝杀
  • wordpress调用昵称东莞优化排名推广
  • 国外可以用什么网站做问卷北京网站优化培训
  • 广东建设继续教育网站首页兰州疫情最新情况
  • 沈阳模板建站软件上海seo
  • 艺术网站模板百度提交入口网址是什么
  • 做网站购买服务器多少钱友情链接互换网站
  • 网站开发的比较上海百度关键词推广
  • 权威的电商网站建设百度快照的作用是什么
  • 视听节目 网站建设360点睛实效平台推广
  • 网站建设的经验总结重庆seo论
  • 公司门户网站怎么做微信营销推广的方式有哪些
  • html5 网站案例百度推广竞价是什么意思
  • 品牌型网站建设百度推广退款电话
  • 上海有几个区几个县苏州seo免费咨询
  • 网上商城网站 找什么做个人怎么在百度上做推广
  • 做微博分析的网站线上推广外包公司
  • 怎么让网站让百度收录怎么申请域名建立网站
  • 扁平化中文网站模板下载公众号引流推广平台
  • 宁夏网站建设多少钱百度怎么注册自己的网站
  • 招聘做网站专业人员百度一下你就知道主页
  • 怎么才能创建网站seo网站推广首页排名
  • 做网站凡科如何网络营销师资格证报名
  • 中国平面设计网站新闻发布会新闻通稿