欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 设计模式之解释器模式

设计模式之解释器模式

2024/10/24 12:29:44 来源:https://blog.csdn.net/youxiaxiaomage/article/details/139385230  浏览:    关键词:设计模式之解释器模式

文章目录

  • 定义
  • 示例代码
  • 源码地址

定义

解释器模式(Interpreter Pattern)是一种行为设计模式,它提供了一种方式来表示语言或表达式的语法,并定义了如何解释这些表达式来执行特定任务。这种模式常用于小型语言或简单的表达式解析,例如配置文件、SQL查询构建器或者计算表达式等。
解释器模式的关键组件包括:

  • Expression(表达式): 抽象表达式接口,定义了一个interpret方法,用于解释表达式。
  • AbstractExpression(抽象表达式): 为所有具体表达式提供一个公共接口,通常包含interpret方法的实现。
  • TerminalExpression(终结符表达式): 实现与语言中的原子元素对应的解释行为。
  • NonTerminalExpression(非终结符表达式): 处理更复杂的语言结构,通常由其他表达式组成。
  • Context(上下文): 提供了环境信息,解释器需要从上下文中获取数据或向其写入数据。

示例代码

public interface Expression {int interpreter(Map<String, Integer> variables);
}
public abstract class AbstractExpression implements Expression {protected Expression left;protected Expression right;public AbstractExpression(Expression left, Expression right) {this.left = left;this.right = right;}
}
public class AddExpression extends AbstractExpression {public AddExpression(Expression left, Expression right) {super(left, right);}@Overridepublic int interpreter(Map<String, Integer> variables) {return super.left.interpreter(variables) + super.right.interpreter(variables);}
}
public class SubExpression extends AbstractExpression {public SubExpression(Expression left, Expression right) {super(left, right);}@Overridepublic int interpreter(Map<String, Integer> variables) {return super.left.interpreter(variables) - super.right.interpreter(variables);}
}
public class VarExpression implements Expression {private String key;public VarExpression(String key) {this.key = key;}@Overridepublic int interpreter(Map<String, Integer> variables) {return variables.get(key);}
}
public class Calculator {private Expression expression;public Calculator(String expStr) {Stack<Expression> stack = new Stack<>();char[] charArray = expStr.toCharArray();Expression left;Expression right;for (int i = 0; i < charArray.length; i++) {switch (charArray[i]) {case '+':left = stack.pop();right = new VarExpression(String.valueOf(charArray[++i]));stack.push(new AddExpression(left, right));break;case '-':left = stack.pop();right = new VarExpression(String.valueOf(charArray[++i]));stack.push(new SubExpression(left, right));break;default:stack.push(new VarExpression(String.valueOf(charArray[i])));}}this.expression = stack.pop();}public int run(Map<String, Integer> variables) {return this.expression.interpreter(variables);}
}

源码地址

https://gitee.com/youxiaxiaomage/java-practices/tree/master/yxxmg-gof-sample/src/main/java/com/yxxmg/gof/behavior/interpreter

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com