解释器模式(Interpreter Pattern)是一种行为型设计模式,它用于定义语言的文法,并解析和执行给定语言中的表达式。该模式将每个表达式表示为一个类,并提供了一种方式来组合这些表达式以实现复杂的语句。
- // 抽象表达式
- abstract class AbstractExpression {
- public abstract int interpret();
- }
-
- // 终结符号 - 数字
- class NumberExpression extends AbstractExpression {
- private int number;
-
- public NumberExpression(int number) {
- this.number = number;
- }
-
- @Override
- public int interpret() {
- return number;
- }
- }
-
- // 非终结符号 - 加法操作
- class AddExpression extends AbstractExpression {
- private AbstractExpression leftExpression;
- private AbstractExpression rightExpression;
-
- public AddExpression(AbstractExpression left, AbstractExpression right) {
- this.leftExpression = left;
- this.rightExpression = right;
- }
-
- @Override
- public int interpret() {
- return leftExpression.interpret() + rightExpression.interpret();
- }
- }
-
- // 非终结符号 - 减法操作
- class SubtractExprssion extends AbstractExpression {
- private AbstractExpression leftExpression;
- private AbstractExpression rightExpression;
-
- public SubtractExprssion(AbstractExpression left, AbstractExpression right) {
- this.leftExpression = left;
- this.rightExpression = right;
- }
-
- @Override
- public int interpret() {
- return leftExpression.interpret() - rightExpression.interpret();
- }
- }
-
- public class Main {
-
- public static void main(String[] args) {
- // 构建语法树:3 + 2 - 5
- AbstractExpression expression = new SubtractExprssion(
- new AddExpression(new NumberExpression(3), new NumberExpression(2)),
- new NumberExpression(5)
- );
-
- int result = expression.interpret(); // 执行解释
-
- System.out.println("Result: " + result); // 输出结果
- }
-
-
- }
在上述示例中,我们定义了抽象表达式类AbstractExpresssion,并创建了具体的终结符号类NumberExpresssion和非终结符号类AddExpresssion、SubtractExpresssioin。客户端代码通过构建相应的表达式对象,并调用其interpret()方法来执行解释。
这个示例只是一个简单的加减法运算的解释器模式实现。你可以根据具体需求进一步扩展和定制化抽象表达式及其子类,以支持更复杂的语言规则和操作。