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

鲜花网站建设论文西安编程培训机构

鲜花网站建设论文,西安编程培训机构,摄影设备有哪些,电子商务和网络营销哪个好目录 什么是解释器模式 解释器模式的实现 解释器模式角色 解释器模式类图 解释器模式举例 解释器模式代码实现 解释器模式的特点 优点 缺点 使用场景 注意事项 实际应用 什么是解释器模式 解释器模式#xff08;Interpreter Pattern#xff09;属于行为型模式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 MapVariableExpression,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);//运算 ab-c 即132-3Expression expression new PlusExpression(a,new MinusExpression(b,c));//结果int res expression.interpret(context);System.out.println(结果为res);} }测试截图 解释器模式的特点 优点 可扩展性强可以通过扩展语言中的表达式和语法规则来实现新的行为可以通过继承机制来改变和扩展文法。易于实现文法解释器模式实现相对简单只需要实现抽象表达式和具体表达式类即可而定义抽象语法树中各个节点地类的实现大体类似。易于拓展语法规则解释器模式可以让用户较为方便的增加新类型的表达式增加新的表达式时无需对现有的表达式进行修改符合开闭原则。 缺点 执行效率较低解释器模式中通常使用大量的循环和递归调用当要解释的句子较复杂时其运行速度很慢且代码的调试过程也比较麻烦。会引起类膨胀解释器模式中的每条规则至少需要定义一个类当包含的文法规则很多时类的个数将急剧增加导致系统难以管理与维护。可应用的场景比较少在软件开发中需要定义语言文法的应用实例非常少所以这种模式很少被使用到。复杂的文法比较难维护对于复杂文法难以维护其每一条规则至少需要定义一个类若一个语言包含太多文法规则则可能难以管理和维护此时可以考虑使用语法分析程序等方式来取代解释器模式。 使用场景 当语言的文法较为简单且执行效率、性能要求不高。当问题重复出现相似的处理逻辑可抽象为一种简单语言且可以用一种简单的语言来进行表达时。当一个语言需要解释执行并且语言中的句子可以表示为一个抽象语法树的时候如XML文档解释。 注意事项 尽量不要在重要的模块中使用解释器模式否则维护会是一个很大的问题。在项目中可以使用shellJRubyGroovy等脚本语言来代替解释器模式,弥补Java编译型语言的不足。对执行效率、性能要求时不要使用解释器模式复杂的文法解释器模式中的文法类层次结构将变得很庞大而无法管理此时最好使用语法分析程序生成器。 实际应用 mysql中的sql语句解析。JDK中Pattern对正则表达式的编译和解析。Spring中ExpressionParser接口的使用。 更多消息资讯请访问昂焱数据https://www.ayshuju.com
http://www.hkea.cn/news/14294669/

相关文章:

  • 优秀设计方案网站郑州抖音seo
  • 药厂网站建设只做恐怖片的网站
  • 东莞外贸网站建站如何做属于自己的领券网站
  • 做网站切图app推广接单渠道
  • 如何自己开发小程序青岛seo结算
  • 个人网站空间大小常用的搜索引擎网站
  • 小男孩与大人做的网站pc 手机网站
  • 如何做网站ip跳转网站制作专业的公司
  • 网站建设模板是什么wordpress参考文献
  • 瑞安市公用建设局网站河南省建设科技网站
  • 给一个网站如何做推广千锋教育培训收费一览表
  • 郑州网站设计见效快汉川建设局网站
  • 沧州开发网站多少钱邯郸做网站找谁
  • 百容千域可以免费做网站吗网页制作作业
  • 固镇做网站多少钱关于网站开发的期刊
  • 成品网站货源1688免费推荐做家具的企业网站
  • app与网站的关系免费网页游戏大全
  • 北京建设投标网站厦门网站设计公司排名
  • 政务网站建设工作的通知WordPress页脚小工具关闭
  • 网站建设项目分析报告wordpress禁止评论昵称外链
  • 电影资源网站开发酒店网站建设报告书
  • 如何用h5做网站沧州关键词排名按天收费
  • 中恒建设职业技术培训学校网站网站的类型及特点
  • 做个网站好还是做淘宝好学了lamp做网站就足够了吗
  • 如何自己做网站模版那个网站做代买
  • 网站首页建设中页面网件路由器登陆网址
  • 山西住房和城乡建设部网站首页济南行知做网站
  • 网站超市安装网站如何做IPV6支持
  • ftp网站服务器爬虫抓取大数据精准获客
  • wordpress formcraft 0.8下载seo按照搜索引擎的