Java设计模式:解释器模式的介绍及代码演示

解释器模式介绍

解释器模式是指,将一种特定的语言或语法,解释为有用的信息。比如说将英语解释为中文、解析正则表达式、汇编语言解析为机器语言等这些都可以看作是解析器模式。通过解析器模式,甚至可以设计自己的语言,然后通过自定义的解析器去翻译它。例如,现在要实现一个需求,将hmhmwsbm翻译成黑猫黑猫我是白猫,就可以使用解释器模式去实现。

上面的图中包含了解释器模式所需要的角色信息,首先要有一个表示上下文的表达式,然后经过一系列的解释器最终得到解析的结果,其中非终结解释器是指解释的过程还没有结束,还需要传递到下一解释器继续对上下文进行解释,直到解释完成,在终结解释器中得到最终结果。

解释器模式示例代码

使用解释器模式代码将hmhmwsbm翻译成黑猫黑猫我是白猫

创建表达式对象

 

java

代码解读

复制代码

/** * 上下文对象 */ public class Context { //需要被解释的表达式 private String expression; public Context(String expression) { this.expression = expression; } public String getExpression() { return expression; } public void setExpression(String expression) { this.expression = expression; } }

表达式中存储了hmhmwsbm,这是一个需要被解释的表达式

创建抽象解释器

 

java

代码解读

复制代码

/** * 抽象解释器 */ public abstract class Expression { /** * 解释方法 * @param context 表达式对象 */ public abstract void explain(Context context); }

声明了用来解释表达式的抽象方法

创建三个具体的解释器

 

java

代码解读

复制代码

/** * 黑猫解释器 */ public class BlackExpression extends Expression{ private Expression white; public BlackExpression() { white = new WhiteExpression(); } @Override public void explain(Context context) { context.setExpression(context.getExpression().replaceAll("hm", "黑猫")); white.explain(context); } }

黑猫解释器中定义了解释器链中的下一个解释器白猫解释器whiteExpression。当explain方法完成当前解释后,将上下文内容交给下一解释器处理。

 

java

代码解读

复制代码

/** * 白猫解释器 */ public class WhiteExpression extends Expression{ private Expression other; public WhiteExpression() { this.other = new OtherExpression(); } @Override public void explain(Context context) { context.setExpression(context.getExpression().replaceAll("bm", "白猫")); other.explain(context); } }

白猫解释器中定义了解释器链中的下一个解释器其他内容解释器OtherExpression。当explain方法完成当前解释后,将上下文内容交给下一解释器处理。

 

java

代码解读

复制代码

/** * 其他内容解释器 */ public class OtherExpression extends Expression{ @Override public void explain(Context context) { context.setExpression(context.getExpression().replaceAll("ws", "我是")); } }

其他内容解释器不包含其他任何解释器对象,因为这个解释器是一个终结解释器,是解释器链的终点。

测试解释器模式

整理了一份核心面试笔记包括了:Java面试、Spring、JVM、MyBatis、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题

需要全套面试笔记【点击此处即可】免费获取

java

代码解读

复制代码

public class test_01 { public static void main(String[] args) throws InterruptedException { //创建上下文对象 Context context = new Context("hmhmwsbm"); //创建头解释器 Expression expression = new BlackExpression(); //向解释器链中添加上下文对象 expression.explain(context); //输出解释后的结果 System.out.println(context.getExpression()); } }

解释器模式执行的流程为:创建包含待解释信息的上下文对象————>创建解释器链中的头节点————>将上下文对象交给头解释器处理————>解释器链执行完毕后输出解释结果信息。

运行结果:

总结

解释器模式适用于对简单表达式的处理,并且实现起来并不复杂,可以根据具体的需求灵活的修改解释器的实现细节,但是需要注意的是,这种设计模式可能会产生很多类文件,所以不适合复杂的表达式业务场景,对于复杂表达式的处理,开发和维护也相对困难。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值