JAVA设计模式之解释器模式详解

这篇文章主要介绍了JAVA设计模式之解释器模式详解,解释器模式是类的行为模式,给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器,需要的朋友可以参考下

在阎宏博士的《JAVA与模式》一书中开头是这样描述解释器(Interpreter)模式的:

解释器模式是类的行为模式。给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子。

解释器模式的结构

下面就以一个示意性的系统为例,讨论解释器模式的结构。系统的结构图如下所示:

模式所涉及的角色如下所示:

(1)抽象表达式(Expression)角色:声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口主要是一个interpret()方法,称做解释操作。

(2)终结符表达式(Terminal Expression)角色:实现了抽象表达式角色所要求的接口,主要是一个interpret()方法;文法中的每一个终结符都有一个具体终结表达式与之相对应。比如有一个简单的公式R=R1+R2,在里面R1和R2就是终结符,对应的解析R1和R2的解释器就是终结符表达式。

(3)非终结符表达式(Nonterminal Expression)角色:文法中的每一条规则都需要一个具体的非终结符表达式,非终结符表达式一般是文法中的运算符或者其他关键字,比如公式R=R1+R2中,“+"就是非终结符,解析“+”的解释器就是一个非终结符表达式。

(4)环境(Context)角色:这个角色的任务一般是用来存放文法中各个终结符所对应的具体值,比如R=R1+R2,我们给R1赋值100,给R2赋值200。这些信息需要存放到环境角色中,很多情况下我们使用Map来充当环境角色就足够了。

为了说明解释器模式的实现办法,这里给出一个最简单的文法和对应的解释器模式的实现,这就是模拟Java语言中对布尔表达式进行操作和求值。

在这个语言中终结符是布尔变量,也就是常量true和false。非终结符表达式包含运算符and,or和not等布尔表达式。这个简单的文法如下:

复制代码 代码如下:

Expression  ::= Constant | Variable | Or | And | NotAnd ::= Expression 'AND' Expression

Or::= Expression 'OR' Expression

Not ::= 'NOT' Expression

Variable::= 任何标识符

Constant    ::= 'true' | 'false'

上一篇:Spring实现文件上传功能下一篇:Spring bean为什么认是单例 热门搜索

解释器模式 

模式设计 

设计模式 

模版设计模式 

溶解模式 

相关文章

JAVA设计模式之解释器模式详解

2021-10-19阅读(9112)评论(0)推荐()

这篇文章主要介绍了JAVA设计模式之解释器模式详解,解释器模式是类的行为模式,给定一个语言之后,解释器模式可以定义出其文法的一种表示,并同时提供一个解释器,需要...

Java设计模式之java解释器模式详解

2021-09-28阅读(4487)评论(0)推荐()

这篇文章主要介绍了Java设计模式之解释器模式定义与用法,结合具体实例形式详细分析了Java解释器模式的概念、原理、定义及相关操作技巧,需要的朋友可以参考下

Java设计模式编程之解释器模式的简单讲解

2021-10-06阅读(9687)评论(0)推荐()

这篇文章主要介绍了Java设计模式编程之解释器模式的讲解,解释器设计模式要注意其引发的性能问题,需要的朋友可以参考下

Java设计模式之解释器模式(Interpreter模式)介绍

2021-10-19阅读(6821)评论(0)推荐()

这篇文章主要介绍了Java设计模式之解释器模式(Interpreter模式)介绍,Interpreter定义:定义语言的文法,并且建立一个解释器来解释该语言中的...

C++设计模式之解释器模式

2021-10-06阅读(7862)评论(0)推荐()

这篇文章主要介绍了C++设计模式之解释器模式,本文讲解了什么是解释器模式、文法规则和抽象语法树、解释器模式的使用场合等内容,需要的朋友可以参考下

Android编程设计模式之解释器模式详解

2021-10-05阅读(9577)评论(0)推荐()

这篇文章主要介绍了Android编程设计模式之解释器模式,详细分析了Android解释器模式的概念、原理、使用场景、使用方法及相关操作注意事项,需要的朋友可以参...

23种设计模式(15)java解释器模式

2021-10-07阅读(9396)评论(0)推荐()

这篇文章主要为大家详细介绍了23种设计模式之java解释器模式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

取消

有人回复邮件通知

提交评论

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...