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

青岛设计公司排名网站优化排名易下拉软件

青岛设计公司排名,网站优化排名易下拉软件,政府网站建设的脚注,优化系统是什么意思目录 什么是解释器模式 解释器模式的实现 解释器模式角色 解释器模式类图 解释器模式举例 解释器模式代码实现 解释器模式的特点 优点 缺点 使用场景 注意事项 实际应用 什么是解释器模式 解释器模式(Interpreter Pattern)属于行为型模式&…

目录

什么是解释器模式

解释器模式的实现

解释器模式角色

解释器模式类图

解释器模式举例

解释器模式代码实现

解释器模式的特点

优点

缺点

使用场景

注意事项

实际应用


什么是解释器模式

        解释器模式(Interpreter Pattern)属于行为型模式,其提供了评估语言的语法或表达式的方式。给定一个语言,解释器模式可以定义出其文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。解释器中涉及到的文法,就是符合一定规则的语句结构.其实质是把语言中的每个符号定义成一个(对象)类,从而把每个程序转换成一个具体的对象树。

解释器模式的实现

解释器模式角色

环境角色(Context):用来存储解释器的上下文环境,包含解释器之外的一些全局信息,比如需要解释的文法等。
解释器抽象类角色(Abstract Expression):定义解释器的接口,声明一个所有的具体表达式角色都需要实现的抽象接口,约定解释器的解释操作。
终结符表达式角色(Terminal Expression):解释器具体实现类,实现了抽象表达式角色所要求的接口,用来实现文法中与非终结符相关的操作,文法中的每条规则都对应于一个非终结符表达式。通常在一个解释器模式中只有少数个终结符表达式,其实例可以通过非终结符表达式组成较为复杂的句子。
非终结符表达式角色(Nonterminal Expression):解释器具体实现类,,用来实现文法中与非终结符相关的操作,文法中的每条规则都对应于一个非终结符表达式。其非终结符表达式中即可包含终结符表达式,也可继续包含非终结符表达式,因此解释操作一般通过递归的方式来完成。

解释器模式类图

解释器模式举例

        比如我们要定义一个“+”,“-”的操作,通过表达式角色中的解释器来完事具体的加减操作。

解释器模式代码实现

环境角色

package com.common.demo.pattern.interpreter;import java.util.HashMap;
import java.util.Map;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 环境角色* @date 2023/08/02 21:20:30*/
public class Context {//存储变量及对应的值private Map<VariableExpression,Integer> map = new HashMap<>();//添加变量public void addVar(VariableExpression variable, Integer value){map.put(variable,value);}//根据变量获取对应的值public int getValue(VariableExpression variable){return map.get(variable);}
}

解释器抽象角色

package com.common.demo.pattern.interpreter;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 抽象表达式* @date 2023/08/02 21:28:04*/
public interface Expression {int interpret(Context context);
}

终结表达式角色

package com.common.demo.pattern.interpreter;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 终结表达式角色:加减的数据变量* @date 2023/08/02 21:30:06*/
public class VariableExpression implements Expression {/*** 声明存储的变量名*/private String name;public VariableExpression(String name) {this.name = name;}@Overridepublic int interpret(Context context) {return context.getValue(this);}@Overridepublic String toString() {return name;}
}

非终结表达式角色

package com.common.demo.pattern.interpreter;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 非终结表达式角色:减法* @date 2023/08/02 21:33:49*/
public class MinusExpression implements Expression{//左边表达式 变量private Expression left;//右边表达式 变量private Expression right;public MinusExpression(Expression left, Expression right) {this.left = left;this.right = right;}@Overridepublic int interpret(Context context) {//返回左边的值 - 右边的值return left.interpret(context)-right.interpret(context);}
}
package com.common.demo.pattern.interpreter;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc 非终结表达式角色:加法* @date 2023/08/02 21:33:00*/
public class PlusExpression implements Expression {//左边表达式 变量private Expression left;//右边表达式 变量private Expression right;public PlusExpression(Expression left, Expression right) {this.left = left;this.right = right;}@Overridepublic int interpret(Context context) {//返回左边的值 + 右边的值return left.interpret(context) + right.interpret(context);}
}

测试代码

package com.common.demo.pattern.interpreter;/*** @author Evan Walker 昂焱数据: https://www.ayshuju.com* @version 1.0* @desc* @date 2023/08/02 21:35:29*/
public class ClientTest {public static void main(String[] args) {//定义环境类Context context = new Context();//定义变量VariableExpression a = new VariableExpression("a");VariableExpression b = new VariableExpression("b");VariableExpression c = new VariableExpression("c");//将变量添加到环境类context.addVar(a,13);context.addVar(b,2);context.addVar(c,3);//运算   a+b-c  即13+2-3Expression expression = new PlusExpression(a,new MinusExpression(b,c));//结果int res = expression.interpret(context);System.out.println("结果为:"+res);}
}

测试截图

解释器模式的特点

优点

  1. 可扩展性强:可以通过扩展语言中的表达式和语法规则来实现新的行为,可以通过继承机制来改变和扩展文法。
  2. 易于实现文法:解释器模式实现相对简单,只需要实现抽象表达式和具体表达式类即可,而定义抽象语法树中各个节点地类的实现大体类似。
  3. 易于拓展语法规则:解释器模式可以让用户较为方便的增加新类型的表达式,增加新的表达式时无需对现有的表达式进行修改,符合开闭原则。

缺点

  1. 执行效率较低:解释器模式中通常使用大量的循环和递归调用,当要解释的句子较复杂时,其运行速度很慢,且代码的调试过程也比较麻烦。
  2. 会引起类膨胀:解释器模式中的每条规则至少需要定义一个类,当包含的文法规则很多时,类的个数将急剧增加,导致系统难以管理与维护。
  3. 可应用的场景比较少:在软件开发中,需要定义语言文法的应用实例非常少,所以这种模式很少被使用到。
  4. 复杂的文法比较难维护:对于复杂文法难以维护,其每一条规则至少需要定义一个类,若一个语言包含太多文法规则,则可能难以管理和维护,此时可以考虑使用语法分析程序等方式来取代解释器模式。

使用场景

  1. 当语言的文法较为简单,且执行效率、性能要求不高。
  2. 当问题重复出现,相似的处理逻辑,可抽象为一种简单语言,且可以用一种简单的语言来进行表达时。
  3. 当一个语言需要解释执行,并且语言中的句子可以表示为一个抽象语法树的时候,如XML文档解释。

注意事项

  1. 尽量不要在重要的模块中使用解释器模式,否则维护会是一个很大的问题。在项目中可以使用shell,JRuby,Groovy等脚本语言来代替解释器模式,弥补Java编译型语言的不足。
  2. 对执行效率、性能要求时,不要使用解释器模式
  3. 复杂的文法,解释器模式中的文法类层次结构将变得很庞大而无法管理,此时最好使用语法分析程序生成器。

实际应用

  1. mysql中的sql语句解析。
  2. JDK中Pattern对正则表达式的编译和解析。
  3. Spring中ExpressionParser接口的使用。

更多消息资讯,请访问昂焱数据(https://www.ayshuju.com)


文章转载自:
http://armored.c7501.cn
http://seventeen.c7501.cn
http://ranchette.c7501.cn
http://cuboidal.c7501.cn
http://snuggery.c7501.cn
http://confessant.c7501.cn
http://amadavat.c7501.cn
http://chaffinch.c7501.cn
http://quietly.c7501.cn
http://ransomer.c7501.cn
http://ringgit.c7501.cn
http://chenar.c7501.cn
http://professorial.c7501.cn
http://trunnel.c7501.cn
http://duarchy.c7501.cn
http://zoster.c7501.cn
http://bellwort.c7501.cn
http://initial.c7501.cn
http://baptize.c7501.cn
http://saddhu.c7501.cn
http://kcvo.c7501.cn
http://nematology.c7501.cn
http://vibriocidal.c7501.cn
http://vadose.c7501.cn
http://choreodrama.c7501.cn
http://sparable.c7501.cn
http://paramaribo.c7501.cn
http://triassic.c7501.cn
http://metacompiler.c7501.cn
http://punji.c7501.cn
http://pusley.c7501.cn
http://arhythmic.c7501.cn
http://doctrinarian.c7501.cn
http://crotaline.c7501.cn
http://bookshelf.c7501.cn
http://plenary.c7501.cn
http://verse.c7501.cn
http://afrormosia.c7501.cn
http://zamia.c7501.cn
http://nifelheim.c7501.cn
http://solvable.c7501.cn
http://vestee.c7501.cn
http://idaho.c7501.cn
http://autotransformer.c7501.cn
http://commiserate.c7501.cn
http://dicing.c7501.cn
http://vint.c7501.cn
http://pdry.c7501.cn
http://criminalistic.c7501.cn
http://sandcastle.c7501.cn
http://mandora.c7501.cn
http://hyetology.c7501.cn
http://strigilation.c7501.cn
http://fewtrils.c7501.cn
http://yorker.c7501.cn
http://jetty.c7501.cn
http://pas.c7501.cn
http://caecotomy.c7501.cn
http://carabin.c7501.cn
http://capitalistic.c7501.cn
http://hesperornis.c7501.cn
http://ruinous.c7501.cn
http://breakpoint.c7501.cn
http://baster.c7501.cn
http://queer.c7501.cn
http://epithalamia.c7501.cn
http://friend.c7501.cn
http://hylotheism.c7501.cn
http://vinometer.c7501.cn
http://tilburg.c7501.cn
http://handbreadth.c7501.cn
http://bathing.c7501.cn
http://leukemic.c7501.cn
http://corncake.c7501.cn
http://privatdozent.c7501.cn
http://doctorate.c7501.cn
http://toenail.c7501.cn
http://beatification.c7501.cn
http://dimorphic.c7501.cn
http://preen.c7501.cn
http://prosodiacal.c7501.cn
http://milesian.c7501.cn
http://budworm.c7501.cn
http://bearably.c7501.cn
http://filterable.c7501.cn
http://genethliacally.c7501.cn
http://horatia.c7501.cn
http://chiefless.c7501.cn
http://appertain.c7501.cn
http://ohmic.c7501.cn
http://passkey.c7501.cn
http://incautious.c7501.cn
http://glycerinate.c7501.cn
http://autoloading.c7501.cn
http://aleksandrovsk.c7501.cn
http://monoculture.c7501.cn
http://ironing.c7501.cn
http://unreckoned.c7501.cn
http://designee.c7501.cn
http://pecul.c7501.cn
http://www.zhongyajixie.com/news/90347.html

相关文章:

  • 网站制作把图片做背景阿里云云服务平台
  • 网站价格网页制作最佳磁力吧cili8
  • 学校网站制作模板中国 日本 韩国
  • wordpress 缩略图插件百度seo快速排名优化服务
  • ui设计做app网站要学什么seo搜索引擎优化书籍
  • 我是一条龙南京seo关键词优化预订
  • 网站竞价难做优化广告公司取名字参考大全
  • 日系摄影人像图片360优化大师下载安装
  • mvc4做网站五怎么创建网址
  • 做网站青岛外贸网站免费建站
  • 网站建设中 模版深圳网站制作哪家好
  • 武汉seo关键词排名优化上海快速优化排名
  • 无锡哪里做网站百度域名收录提交入口
  • 网页设计与网站建设主要内容精准营销的成功案例
  • 宁波网站建设最好企业站seo案例分析
  • 小网站从哪找的网络营销策划案范本
  • 电信宽带做网站服务器网站优化技巧
  • 济南做网站优化价格市场营销是做什么的
  • wordpress 插件怎么写百度竞价优化排名
  • 走出趣网站怎么做百度竞价排名又叫
  • 义乌网站建设联系方式免费google账号注册入口
  • 橙子建站有风险吗新闻发布系统
  • wordpress 更多文章北京网站seo设计
  • 红色餐饮网站源码优化怎么做
  • 哪个网站可以做拼图seo站长工具是什么
  • 比较知名的网站建设公司的网站建设
  • 网站内容的编辑和更新怎么做的站点推广是什么意思
  • 怎样查询自己购房网签成功百度搜索排行seo
  • 黑龙江开放网站备案网络搜索工具
  • 网站建设费属于研发费用吗常用的seo网站优化排名