当前位置: 首页 > news >正文

Java 设计模式之解释器模式

文章目录

  • Java 设计模式之解释器模式
    • 概述
    • UML
    • 代码实现

Java 设计模式之解释器模式

概述

  • 解释器模式(interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。
  • 如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。

UML

在这里插入图片描述

  • AbstractExpression:表达式接口,定义解释行为。
  • TerminalExpression:终结符表达式,直接返回一个值。
  • NonterminalExpression:非终结符表达式,包含其他表达式并组合它们。
  • Context:上下文环境类。

代码实现

定义解释器接口:

public interface Expression {
    int interpret();
}

定义终端解释器类:

public class NumberExpression implements Expression {
    private int number;

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

    @Override
    public int interpret() {
        return number;
    }
}

定义非终端解释器类:

// 加法表达式
public class AddExpression implements Expression {
    private Expression leftExpression;
    private Expression rightExpression;

    public AddExpression(Expression leftExpression, Expression rightExpression) {
        this.leftExpression = leftExpression;
        this.rightExpression = rightExpression;
    }

    @Override
    public int interpret() {
        return leftExpression.interpret() + rightExpression.interpret();
    }
}
// 减法表达式
public class SubtractExpression implements Expression {
    private Expression leftExpression;
    private Expression rightExpression;

    public SubtractExpression(Expression leftExpression, Expression rightExpression) {
        this.leftExpression = leftExpression;
        this.rightExpression = rightExpression;
    }

    @Override
    public int interpret() {
        return leftExpression.interpret() - rightExpression.interpret();
    }
}

使用:

public class Client {
    public static void main(String[] args) {
        NumberExpression numberExpression1 = new NumberExpression(1);
        NumberExpression numberExpression2 = new NumberExpression(2);
        NumberExpression numberExpression3 = new NumberExpression(5);
        Expression addExpression = new AddExpression(numberExpression1, numberExpression2);
        Expression subtractExpression = new SubtractExpression(addExpression, numberExpression3);
        int result = subtractExpression.interpret();
        System.out.println("result: " + result);
    }
}

输出:

result: -2

相关文章:

  • UGUI RectTransform的SizeDelta属性
  • ocr智能票据识别系统|自动化票据识别集成方案
  • 深入浅出:CUDA是什么,如何利用它进行高效并行计算
  • 大数据开发治理平台~DataWorks(词汇梳理)
  • Zipkin 和 SkyWalking 区别
  • Qt——静态函数中发送信号方法总结(不需要通过类内部信号与槽实现,关键是清楚你发送的信号源自哪个对象)
  • docker 安装的open-webui链接ollama出现网络错误
  • 股票与比特币投资困境分析及解决方案
  • Open-WebUI官方部署文档
  • 【Git】说说Git中开发测试的使用Git分支Git标签的使用场景
  • 使用Java爬虫获取1688按图搜索商品(拍立淘API接口)
  • 模拟解决哈希表冲突
  • AI大模型零基础学习(6):多模态大模型实战——让AI看懂世界
  • 【Qt】之【Linux】Qt 5.12.8 单独编译 qtvirtualkeyboard 模块源码
  • LangChain实践11-问答
  • 【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析⑩】
  • 深入解析iOS视频录制(二):自定义UI的实现
  • 伪装目标检测(Camouflaged Object Detection, COD)教程
  • Spring-GPT智谱清言AI项目(附源码)
  • Day48(补)【AI思考】-设计模式三大类型统一区分与记忆指南
  • 乡村快递取件“跑腿费”屡禁不止?云南元江县公布举报电话
  • 法治日报:商品明细是隐私,外卖员快递员不应知晓
  • 央行行长:未来还可以扩大结构性货币政策工具规模或创设新的政策工具
  • 潘功胜:将创设科技创新债券风险分担工具
  • 苏丹宣布与阿联酋断交
  • 热点问答丨新加坡人民行动党缘何再赢议会选举