定义:给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。

类型:行为类模式
类图:
解释器模式是一个比较少用的模式,本人之前也没有用过这个模式。下面我们就来一起看一下解释器模式。
解释器模式的结构
代码实现
class Context {}
abstract class Expression {
public abstract Object interpreter(Context ctx);
}
class TerminalExpression extends Expression {
public Object interpreter(Context ctx){
return null;
}
}
class NonterminalExpression extends Expression {
public NonterminalExpression(Expression...expressions){
}
public Object interpreter(Context ctx){
return null;
}
}
public class Client {
public static void main(String[] args){
String expression = "";
char[] charArray = expression.toCharArray();
Context ctx = new Context();
Stack<Expression> stack = new Stack<Expression>();
for(int i=0;i<charArray.length;i++){
//进行语法判断,递归调用
}
Expression exp = stack.pop();
exp.interpreter(ctx);
}
}
文法递归的代码部分需要根据具体的情况来实现,因此在代码中没有体现。抽象表达式是生成语法集合的关键,每个非终结符表达式解释一个最小的语法单元,然后通过递归的方式将这些语法单元组合成完整的文法,这就是解释器模式。
解释器模式的优缺点
解释器是一个简单的语法分析工具,它最显著的优点就是扩展性,修改语法规则只需要修改相应的非终结符就可以了,若扩展语法,只需要增加非终结符类就可以了。
但是,解释器模式会引起类的膨胀,每个语法都需要产生一个非终结符表达式,语法规则比较复杂时,就可能产生大量的类文件,为维护带来非常多的麻烦。同时,由于采用递归调用方法,每个非终结符表达式只关心与自己相关的表达式,每个表达式需要知道最终的结果,必须通过递归方式,无论是面向对象的语言还是面向过程的语言,递归都是一个不推荐的方式。由于使用了大量的循环和递归,效率是一个不容忽视的问题。特别是用于解释一个解析复杂、冗长的语法时,效率是难以忍受的。
解释器模式的适用场景
在以下情况下可以使用解释器模式:
注意事项
解释器模式真的是一个比较少用的模式,因为对它的维护实在是太麻烦了,想象一下,一坨一坨的非终结符解释器,假如不是事先对文法的规则了如指掌,或者是文法特别简单,则很难读懂它的逻辑。解释器模式在实际的系统开发中使用的很少,因为他会引起效率、性能以及维护等问题。
总结
以上所述是小编给大家介绍的Java设计模式之解释器模式_动力节点Java学院整理,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# java
# 设计模式
# 解释器模式
# Java设计模式之解释器模式
# 深入理解Java设计模式之解释器模式
# 浅谈Java解释器模式
# Java设计模式之java解释器模式详解
# Java基于解释器模式实现定义一种简单的语言功能示例
# Java设计模式编程之解释器模式的简单讲解
# 解析Java的设计模式编程之解释器模式的运用
# JAVA设计模式之解释器模式详解
# Java实现自定义语言和表达式解析的解释器模式
# 递归
# 是一个
# 就可以
# 加减乘除
# 只需要
# 小编
# 有一个
# 少用
# 的是
# 都是
# 情况下
# 都要
# 多个
# 很难
# 也没
# 在此
# 这就是
# 是由
# 他会
# 给大家
相关文章:
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
Thinkphp 中 distinct 的用法解析
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
如何快速使用云服务器搭建个人网站?
建站之星安装提示数据库无法连接如何解决?
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
如何快速搭建高效简练网站?
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
用v-html解决Vue.js渲染中html标签不被解析的问题
利用JavaScript实现拖拽改变元素大小
做企业网站制作流程,企业网站制作基本流程有哪些?
如何通过网站建站时间优化SEO与用户体验?
5种Android数据存储方式汇总
导航网站建站方案与优化指南:一站式高效搭建技巧解析
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
,有什么在线背英语单词效率比较高的网站?
盐城做公司网站,江苏电子版退休证办理流程?
如何在IIS7上新建站点并设置安全权限?
山东网站制作公司有哪些,山东大源集团官网?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
公司网站设计制作厂家,怎么创建自己的一个网站?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
香港服务器租用每月最低只需15元?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
如何做静态网页,sublimetext3.0制作静态网页?
如何快速查询网址的建站时间与历史轨迹?
音响网站制作视频教程,隆霸音响官方网站?
如何快速生成可下载的建站源码工具?
网站网页制作专业公司,怎样制作自己的网页?
如何用wdcp快速搭建高效网站?
临沂网站制作公司有哪些,临沂第四中学官网?
开心动漫网站制作软件下载,十分开心动画为何停播?
公司门户网站制作流程,华为官网怎么做?
如何通过西部数码建站助手快速创建专业网站?
已有域名建站全流程解析:网站搭建步骤与建站工具选择
内网网站制作软件,内网的网站如何发布到外网?
网站制作需要会哪些技术,建立一个网站要花费多少?
深圳网站制作的公司有哪些,dido官方网站?
网页设计与网站制作内容,怎样注册网站?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
如何批量查询域名的建站时间记录?
如何确保FTP站点访问权限与数据传输安全?
股票网站制作软件,网上股票怎么开户?
建站主机功能解析:服务器选择与快速搭建指南
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?
*请认真填写需求信息,我们会在24小时内与您取得联系。