• 作者:老汪软件技巧
  • 发表时间:2024-09-20 17:02
  • 浏览量:

创建三个具体的解释器

/**
 * 黑猫解释器
 */
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方法完成当前解释后,将上下文内容交给下一解释器处理。

/**
 * 白猫解释器
 */
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方法完成当前解释后,将上下文内容交给下一解释器处理。

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

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

_黑猫解释器中定义了解释器链中的下一个解释器白猫解释器_黑猫解释器中定义了解释器链中的下一个解释器白猫解释器

测试解释器模式

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());
	}
}

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

运行结果:

总结

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


上一条查看详情 +Redis高级数据结构详解
下一条 查看详情 +没有了