您的位置:首页 > 编程语言 > Java开发

Java设计模式(二十四):解释器模式

2018-01-25 11:56 274 查看

解释器模式(Interpreter Pattern)

解释器模式(Interpreter Pattern):属于对象的行为模式。给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

解释器模式UML图



Java

解释器模式涉及的角色

抽象表达式(AbstractExpression)角色:声明一个所有的具体表达式角色都需要实现的抽象接口。这个接口主要是一个interpret()方法,称做解释操作。终结符表达式(TerminalExpression)角色:实现了抽象表达式角色所要求的接口,主要是一个interpret()方法;文法中的每一个终结符都有一个具体终结表达式与之相对应。比如有一个简单的公式R=R1+R2,在里面R1和R2就是终结符,对应的解析R1和R2的解释器就是终结符表达式。非终结符表达式(NonTerminalExpression
)角色:文法中的每一条规则都需要一个具体的非终结符表达式,非终结符表达式一般是文法中的运算符或者其他关键字,比如公式R=R1+R2中,“+"就是非终结符,解析“+”的解释器就是一个非终结符表达式。环境(Context)角色:这个角色的任务一般是用来存放文法中各个终结符所对应的具体值,比如R=R1+R2,我们给R1赋值100,给R2赋值200。这些信息需要存放到环境角色中,很多情况下我们使用Map来充当环境角色就足够了。

示例代码

环境类 InterpreterContext



Java
抽象表达式类 AbstractExpresstion



Java
终结符表达式类 TerminalExpression



Java
非终结表达式类 NonTerminalExpresstion



Java
客户端测试类 InterpreterPatternTest



Java

解释器模式优点

很容易改变和扩展文法,因为解释器模式使用类来表示文法规则,你可以使用继承来改变或扩展该文法。也比较容易实现文法,因为定义抽象语法树中各个节点的类的实现大体类似,这些类都易于直接编写。

解释器模式缺点

解释器模式为文法中的每一条规则至少定义一个类,因此包含许多规则的文法可能难以管理和维护。建议当文法非常复杂时,使用其他的技术来处理。

Java学习资料获取(复制下段连接至浏览器即可)

data:text/html;charset=UTF-8;base64,5p625p6E5biI5a2m5Lmg6LWE5paZ5YWN6LS56aKG5Y+W6K+35Yqg5omj5omj5Y+35pivMTAxODkyNTc4MA==

喜欢文章的可以关注小编 小编每天都会给大家更新哦
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息