Java23种设计模式-行为型模式之解释器模式

解释器模式(Interpreter Pattern):定义了一种文法,并且对于任何该文法的句子,都能够解释和执行。可以将复杂的问题分解成一系列简单的表达式,然后使用解释器来解释这些表达式。

涉及角色
抽象表达式(Abstract Expression):定义一个抽象的解释操作,通常包含一个interpret()方法,用于解释语句。
终结符表达式(Terminal Expression):实现抽象表达式中的interpret()方法,表示语言中的终结符。
非终结符表达式(Non-terminal Expression):实现抽象表达式中的interpret()方法,表示语言中的非终结符。
上下文(Context):包含解释器解释的信息的类。
客户端(Client):创建并配置表达式的类。

示例:定义了抽象表达式Expression、终结符表达式NumberExpression、非终结符表达式AddExpression以及上下文Context。通过这些类的协作,我们可以解释一个简单的加法表达式,并输出计算结果

java 复制代码
// 上下文
public class Context {
    private String input;
    private int output;

    public Context(String input) {
        this.input = input;
    }

    public String getInput() {
        return input;
    }

    public void setInput(String input) {
        this.input = input;
    }

    public int getOutput() {
        return output;
    }

    public void setOutput(int output) {
        this.output = output;
    }
}
// 抽象表达式
interface Expression {
    int interpret(Context context);
}
// 终结符表达式
class NumberExpression implements Expression {
    private int number;

    public NumberExpression(int number) {
        this.number = number;
    }

    @Override
    public int interpret(Context context) {
        return number;
    }
}
// 非终结符表达式
class AddExpression implements Expression {
    private Expression left;
    private Expression right;

    public AddExpression(Expression left, Expression right) {
        this.left = left;
        this.right = right;
    }

    @Override
    public int interpret(Context context) {
        return left.interpret(context) + right.interpret(context);
    }
}
// 客户端
public class InterpreterPatternTest {
    public static void main(String[] args) {
        Context context = new Context("1 + 2 + 3");
        
        Expression expression = new AddExpression(new NumberExpression(1), new AddExpression(new NumberExpression(2), new NumberExpression(3)));
        
        int result = expression.interpret(context);
        
        System.out.println("Result: " + result);
    }
}
相关推荐
计算机程序员小杨5 分钟前
计算机毕设选题:电子商务供应链大数据分析系统Python+Django技术实现详解|毕设|计算机毕设|程序开发|项目实战
java·vue.js·python
AAA修煤气灶刘哥6 分钟前
别再懵注解!从 JDK 到 SpringBoot,这篇 “代码贴标签” 攻略超下饭
java·后端·代码规范
fat house cat_42 分钟前
【Spring底层分析】Spring AOP补充以及@Transactional注解的底层原理分析
java·后端·spring
拾忆,想起1 小时前
Redis红锁(RedLock)解密:分布式锁的高可用终极方案
java·数据库·redis·分布式·缓存·性能优化·wpf
衍生星球1 小时前
JSP程序设计之JSP指令
java·开发语言·jsp
007php0072 小时前
Go Vendor 和 Go Modules:管理和扩展依赖的最佳实践
java·开发语言·docker·微服务·golang·自动化·jenkins
郝学胜-神的一滴2 小时前
C++组合模式:构建灵活的层次结构
开发语言·c++·程序人生·设计模式·组合模式
狂奔solar2 小时前
使用Rag 命中用户feedback提升triage agent 准确率
java·前端·prompt
qianmoq2 小时前
第07章:flatMap():处理嵌套数据的利器
java
AAA修煤气灶刘哥2 小时前
后端人必懂的 “中间商” 哲学:代理模式 + 类加载器,从入门到唠明白
java·后端·面试