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

一文吃透11种行为型设计模式:核心原理与实战场景全覆盖 11种行为型模式各司其职、分工明确,开发中可根据业务痛点精准选型解耦交互:中介者模式、观察者模式、责任链模式算法与流程封装:策略模式、模板方法模式请求调度管控:命令模式集合遍历封装:迭代器模式状态管控流转:状态模式、备忘录模式复杂数据操作:访问者模式自定义语法解析:解释器模式行为型模式的核心本质都是解耦、复用、提扩展性,熟练掌握每种模式的适用场景,能极大优化代码结构,减少冗余代码,让复杂业务逻辑更清晰、更易维护。 阅读详情

一、概述

        给定一种语言和其文法的一种表示,再定义一个解释器,该解释器使用表示来解释语言中的句子。

二、适用性               

        当需要解释一种语言,并且可以将该语言中的句子表示为一个抽象语法树的时候。

1.该文法简单对于复杂的文法,文法的类层次变得庞大而无法管理。

2.效率不是一个关键问题,最高效的解释器通常不是通过直接解释语法分析树实现的,而是首先将它们转换成另一种形式。

三、参与者

1.AbstractExpression:声明一个抽象的解释操作,这个接口为抽象语法树中所有的节点所共享。
2.TerminalExpression: 实现与文法中的终结符相关联的解释操作。一个句子中的每个终结符需要该类的一个实例。
3.NonterminalExpression:为文法中的非终结符实现解释(Interpret)操作。
4.Context:包含解释器之外的一些全局信息。
5.Client:构建(或被给定)表示该文法定义的语言中一个特定的句子的抽象语法树。该抽象语法树由NonterminalExpression和TerminalExpression的实例装配而成。调用解释操作。

四、类图


五、示例

AbstractExpression

package cn.lynn.interpreter;

public abstract class Language {

    public abstract void interpret();

}
Expression
package cn.lynn.interpreter;

public class English extends Language {

    @Override
    public void interpret() {
        System.out.println("为网页添加英文解释器!");
    }

}
package cn.lynn.interpreter;

public class Chinese extends Language {

    @Override
    public void interpret() {
        System.out.println("为网页添加中文解释器!");
    }

}
Context
package cn.lynn.interpreter;

import java.util.ArrayList;
import java.util.List;

public class Page {

    private String content;

    private List<Language> list = new ArrayList<Language>();

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public void addLanguage(Language lang) {
        list.add(lang);
    }

    public List<Language> getLanguages() {
        return list;
    }
}
Client
package cn.lynn.interpreter;

public class Client {

    public static void main(String[] args) {
        Page page = new Page();
        page.addLanguage(new English());
        page.addLanguage(new Chinese());
        
        for (Language lang : page.getLanguages()) {
            lang.interpret();
        }
    }

}
Result
为网页添加英文解释器!
为网页添加中文解释器!
【愚公系列】二十三种设计模式(十五)-解释器模式(Interpreter Pattern) 设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。毫无疑问,设计模式对个人、团队和整个系统都带来了显著的益处。它们将代码开发提升到工程化水平,为软件工程构建提供了坚实的基础,就如同大厦的一块块精巧的砖石一样。在项目中明智地应用设计模式可以完美地解决各种复杂问题。 阅读详情

相关推荐

优化QT QML中RTSP流播放延迟:海康摄像头实时监控实践

本文详细探讨了在QT QML中优化海康摄像头RTSP流播放延迟的实践方法。通过调整MediaPlayer缓冲策略、硬件加速、解码器优选等五大技巧,显著降低实时监控场景下的延迟问题。文章还提供了海康摄像头RTSP连接实战代码和避坑指南,帮助开发者快速实现高效流媒体播放。

weixin_28363123的博客 556

23种设计模式之解释器模式

解释器模式在 Java 生态中的典型应用包括: 正则表达式:java.util.regex.Pattern 解析正则语法。 Spring SpEL:Spring 表达式语言解析执行。 规则引擎:Drools 规则的条件解析。 掌握该模式能为特定领域问题提供高度定制化的解决方案,但需权衡其适用性与复杂度。

分享技术应用、实践场景等,评论区开放技术难题讨论,共同成长进步。 652

RK3568/RK3588之修改8250驱动实现RS485收发的自动切换

在串口发送前,若为485,则将控制引脚拉为发送状态,在发送后,循环查看是否发送完成,若发送完成则将引脚置回读状态,如此一来,就能实现在内核测控制方向切换,而不会因为延时造成数据丢失,经过测试此办法可行。全部修改完成后,重新编译生成内核文件和设备树文件,烧写到板子上即可。

哒宰的博客 3114

GOF23设计模式之解释器模式(interpreter)

一、解释器模式概述   (1)它是一种不常用的设计模式;   (2)由于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的编译器和解释器的设计;   (3)当我们需要开发一种新的语言时,可以考虑使用解释器模式;   (4)注意:尽量不要使用解释器模式,后期维护会有很大麻烦。在项目中,可以使用 Jruby、Groovy、Java 的 JS 引擎来替代解释器的作用,弥补...

dcpvpf6917的博客 234

DDR5内存ODT模式全解析:5种状态与实战配置指南(附时序图)

本文深入解析DDR5内存的片上终端电阻(ODT)机制,详细阐述了其五种核心状态(终结电阻禁用、RTT_WR、RTT_NOM_RD、RTT_NOM_WR、RTT_PARK)的定义、切换时序与工作原理。通过解读JESD79-5规范中的时序图,并提供基于模式寄存器的实战配置指南与代码示例,帮助硬件工程师和系统开发者优化信号完整性,解决高负载下的稳定性问题,并实现性能与功耗的最佳平衡。

weixin_29221753的博客 563

STM32G474 FDCAN滤波器配置与多ID接收实战

本文详细介绍了STM32G474 FDCAN滤波器配置与多ID接收实战,重点解析了掩码过滤和范围过滤两种模式的工作原理及配置步骤。通过实际项目案例展示了如何高效配置多个滤波器实现多ID报文接收,并提供了接收FIFO配置与中断处理的优化策略,帮助开发者提升CAN通信系统的稳定性和实时性。

happy2的博客 875

GOF23设计模式-行为型模式5-解释器模式(Interpreter)

解释器模式:给定一种语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。

Tumbler 177

将Python爬取的数据导入钉钉多维表

摘要:本文介绍将Python爬取的数据导入钉钉多维表的完整解决方案。首先通过requests库爬取数据并解析为结构化格式,然后使用钉钉开放平台API对接多维表。关键步骤包括获取app_key、app_secret等凭证,通过OAuth2获取access_token,以及批量写入记录。文章详细说明了参数获取位置、字段类型匹配、权限配置等注意事项,并提供了错误处理建议和性能优化方法。适用于需要将网络数据同步到钉钉多维表的开发场景。

IT深耕十余载,大道之简 2130

设计模式(十六)行为型:解释器模式详解

解释器模式(Interpreter Pattern)是 GoF 23 种设计模式中的行为型模式之一,其核心价值在于为某种特定语言或表达式定义一个语法表示,并提供一个解释器来处理该语法结构。

谦与谦寻的神隐 1079

产品包装质检实战:基于YOLOv5的智能包装合格检测系统全流程指南

摘要: 针对产品包装质检效率低、漏检率高的问题,本文提出基于YOLOv5的智能检测系统。系统通过采集包装缺陷数据(破损、缺标、封装不良等),利用YOLOv5实现多类别缺陷识别(准确率≥95%),并开发Flask Web界面实现检测可视化与报告生成。实验表明,该系统在30帧/秒的产线速度下可稳定运行,显著提升质检效率。项目涵盖数据标注、模型训练、系统开发全流程,具有工业落地价值,适用于智能制造场景的自动化质检需求。(149字)

LXY_LOVE36的博客 93

基于matlab的主成分分析的人脸二维码识别系统

人脸识别因其在系统安全验证、信用验证、刑侦跟踪、身份管理、视频会议、人机交互、智能家居等方面的巨大应用前景,成为当前模式识别和人工智能领域越来越热门的一个研究方向。随着安全入口控制和二维码智能扫描应用需求的快速增长,基于二维码识别的生物人脸统计识别技术也引起了人们的重视。本案例将详细讲解基于主成分分析的人脸特征提取的原理与方法,并将其与 QR 二维码的编解码进行结合,将 MATLAB 作为工具平台,调用 QR 二维码编解码应用程序,进而实现一个人脸二维码自动识别的系统原型。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 977

设计模式之解释器模式(Interpreter)摘录

23种GOF设计模式一般分为三大类:创建型模式、结构型模式、行为模式。创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建、组合和表示它的那些对象。一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化托付给还有一个对象。创建型模式有两个不断出现的主旋律。第一,它们都将关于该系统使用哪些详细的类的信息封装起来。第二,它们隐藏了这些类的实例是怎样被创建和放在一起的。整个系统...

weixin_34212762的博客 101

RK3568项目(四)--uboot启动流程之启动模式选择

本章接着上面,接着来分析uboot启动流程,设计vendor、按键、驱动模式的选择等

文艺小少年的博客 584

**行为型设计模式**的11种经典模式,它们关注对象之间的通信、职责分配与算法的灵活封装

- **责任链(Chain of Responsibility)**:将请求沿处理者链传递,每个处理者决定是否处理或转发,实现松耦合的请求分发。 - **中介者(Mediator)**:用一个中介对象封装一组对象间的交互,降低对象间直接依赖(如聊天室中的消息路由)。 - **备忘录(Memento)**:在不破坏封装的前提下捕获并外部保存对象内部状态,以便后续恢复(如文本编辑器的撤销点)。 - **访问者(Visitor)**:在不修改类的前提下,为一组类的对象添加新操作(适用于数据结构稳定但操

[Blog][Domain] programb.blog.youkuaiyun.com 223

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

设计模式-23种设计模式

设计模式-23种设计模式 目录 文章目录前言设计模式简单介绍创建型1. 工厂模式2. 抽象工厂模式3. 单例模式4. 建造者模式建造者模式(Builder Pattern)建造者模式详解设计模式:Builder模式5. 原型模式结构型1. 适配器模式2. 桥接模式3. 过滤器模式4. 组合模式5. 装饰器6. 外观模式7. 享元模式8. 代理模式行为型1. 责任链模式2. 命令模式3. 解释器模式4. 迭代器模式5. 终结者模式6. 备忘录模式7. 观察者模式8. 状态模式9. 空对象模式10. 策略模式1

莫兮的博客 5134

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

23种设计模式简述-行为型模式-(访问者、备忘录、解释器)

23种设计模式

Duo1J的随笔 146

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

常用设计模式汇总

设计模式是面向对象编程中解决常见问题的可复用方案,分为创建型、结构型和行为型三大类。创建型模式(如单例、工厂)处理对象创建;结构型模式(如适配器、装饰器)关注类和对象组合;行为型模式(如观察者、策略)管理对象间通信。GoF提出的23种经典模式通过封装变化、解耦组件提高代码复用性、可读性和可维护性。设计模式遵循开闭原则等面向对象设计原则,但需避免滥用导致过度设计。现代编程中,函数式语言和框架(如Spring)对部分模式有更简洁的实现方式。

油墨香^-^的博客 922

设计模式GOF23之-----------行为型模式(责任链模式、迭代器模式、中介者模式、命令模式、解释器模式、访问者模式、模版方法模式、状态模式、观察者模式、备忘录模式)

一 责任链模式        任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。 责任链模式的结构   下面使用了一个责任链模式的最简单的实现。   责任链...

金州饿霸吃不饱的博客 871

23种设计模式介绍

设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的解决某一类问题的一种编码方案。在面向对象系统设计中经常可以遇到以下的两类问题:我们经常会抽象出一些类的公共接口以形成抽象基类或者接口。这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的。所以就不得不在要用到子类的地方写new 对象。这样实体类的使用者必须知道实际的子类名称,以及会使程序的扩展性和维护变得越来越困难。...

qq_27704713的博客 628

Java设计模式:23种设计模式

1.软件设计模式概述 2.GoF 的 23 种设计模式的分类和功能 3.UML中的类图及类图之间的关系 4.开闭原则——面向对象设计原则 5.里氏替换原则——面向对象设计原则 6.依赖倒置原则——面向对象设计原则 7.单一职责原则——面向对象设计原则 8.接口隔离原则——面向对象设计原则 9.迪米特法则——面向对象设计原则 10.合成复用原则——面向对象设计原...

weixin_30522183的博客 167

【笔记-转载】23 种设计模式

23 种设计模式:工厂方法模式 ,抽象工厂模式,单例模式,原型模式,建造者模式,适配器模式,装饰器模式,代理模式,门面模式等

qq_56402474的博客 160

java设计模式分类

1.设计模式GOF23:group of four 23,国外4位大牛总结的23中套路。 2.设计模式分为:创建型模式、结构型模式和行为型模式。 1)创建型模式包括:单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。 2)结构型模式包括:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。 3)行为型模式包括:模板方法模式、命令模式、迭代器模式、观察者模式、中介着

u013808431的专栏 290

设计模式笔记

大话设计模式笔记 总结 面对对象 (可维护) 改动时只改需要改动的地方 (可复用) (可扩展) 以后加入需求不需要改动原来的代码 (灵活性) 功能可以满足很多情况 重复 = 易错 + 难改 设计模式 创建型 (Gof Creational Patterns) Factory Method(工厂方法) Abstract Factory(抽象工厂) Builder(建造者) Protot...

weixin_30856725的博客 103

Net设计模式实例系列文章总结

Net设计模式实例系列文章总结1         什么是设计模式设计模式是对在软件设计过程中重复出现的问题提出了一种比较好的解决方案。正如一位专家所说:设计模式是对程序设计人员经常遇到的设计问题的可再现的解决方案(The Smalltalk Companion)。GOF设计模式通常被认为是其他设计模式的基础,随着业务复杂度的增大,会不断涌现新的设计模式,而这些新的设计模式一般会以G

canduecho的专栏 685
上一篇: GoF23种设计模式之行为型模式之责任链模式
下一篇: GoF23种设计模式之行为型模式之命令模式
innovation
博客等级 码龄14年 251粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值