首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

行为型模式:解释器模式

十一大行为模式之十:解释器模式。...给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。...(来自《设计模式之禅》) 你要的故事 解释器顾名思义就是对 2 个不同的表达方式进行转换,让本来不懂的内容解释成看得懂的。比如翻译官就是解释器,把英文翻译成中文,让我们明白外国人说什么。...这 4 种语法各有不同,也即需要不同的解释器去解析。利用今天要讲的解释器模式,我们来实现一番。 解释器模式中,会有一个上下文类,这个类用于给解释器传递参数。...); } 我们上面说了 SQL 语句用的比较多的就是 4 种,每一种其实就是一个解释器,因为语法不一样,解释的逻辑也就不一样,我们就利用 SQLExpression 解释器抽象类,来实现 4 个具体的

36420

设计模式 | 行为型 | 解释器模式

解释器模式(Interpreter) 介绍 解释器模式是一种行为设计模式。 解释器模式为某个语言定义它的语法表示,并定义一个解释器用来处理这个语法。 适用场景 构建一个“语言”解释器。...将一些重复出现的问题用简单的语法来进行表达。 将一个需要解释执行的语言中的句子表示为一个抽象语法树。 ... 优缺点 优点: 开闭原则。 单一职责原则。 缺点: 可以利用的场景比较少。...与其他模式的关系 ... 实现方式 解释器模式代码实现的核心思想就是将语法解析的工作拆分到各个小类中,以此来避免大而全的解析类。...解释器模式的代码实现比较灵活,没有固定的模板,在我的示例中的做法大体可以拆分为: 定义表达式接口。 实现表达式具体类。 实现解释器上下文类,作为“启动器”,负责调用表达式进行。...客户端通过解释器上下文进行调用。 举例 我这里的示例代码主要实现一个类似 poi-tl 模板引擎的功能。 什么是 poi-tl 呢?

38210
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    用于吸烟行为检测的可解释特征学习框架

    有研究者开发了一个用于吸烟行为检测的可解释特征学习框架,它利用深度学习VGG-16预训练网络对输入图像进行预测和分类,在最相关的学习特征/像素或神经元上,使用逐层相关性传播 ( Layer-wise Relevance...Propagation,LRP) 来解释基于吸烟行为的网络检测或预测。...他们忽略了吸烟方式、模式和行为的各种变化,检测过程是模棱两可的(无法解释)。...上述挑战和机器视觉的进步促使研究者们提出、开发和测试一种可解释的吸烟行为检测解决方案,该解决方案具有可解释和可信赖的检测,以改善智慧城市中的公共卫生监测和监测,以实现更健康的环境。...这个可解释的神经网络根据其性能进行评估,并使用LRP、遮挡分析和Integrated Gradient (SmoothGrad) 解释其检测决策,比较学习特征的可解释性以评估烟雾行为检测的可信度,基于在训练中学到的最相关的吸烟特征

    39710

    设计模式行为型:解释器模式(InterpreterPattern)

    定义一个语言的文法,并创建一个解释器去解释该语言中的句子,这里的“语言”是指使用规定格式和语法的代码。 结构图 ?...角色与理解 定义一个语言的文法,并创建一个解释器去解释该语言中的句子,这里的“语言”是指使用规定格式和语法的代码。...解释器模式共分为三种角色: AbstractExpression(抽象表达式):终结符表达式与非终结符表达式的共同父类,声明了抽象的解释行为。...TerminalException(终结符表达式):抽象表达式的子类,包含文法中终结符的解释操作。...Context(环境类):上下文环境 终结符表达式是“一句话”中包含的所有最终解释单元,非终结符表达式将一组终结符表达式连接,完成“一句话”的解释,非终结符表达式将“几句话”连接,完成一段话的解释。

    43920

    设计模式 ☞ 行为型之解释器模式

    1.1 简介 1.1.1 概述   解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。...也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。...如果将它们归纳成一种简单的语言,那么这些问题实例将是该语言的一些句子,这样就可以用“编译原理”中的解释器模式来实现了。 1.1.2 优缺点 优点:  ① 扩展性好。...解释器模式中通常使用大量的循环和递归调用,当要解释的句子较复杂时,其运行速度很慢, 且代码② 的调试过程也比较麻烦。  ③ 会引起类膨胀。...解释器模式中的每条规则至少需要定义一个类,当包含的文法规则很多时,类的个数将急剧增加,导致系统难以管理与维护。  ④ 可应用的场景比较少。

    24740

    设计模式之解释器模式(行为型)

    一、模式定义 解释器模式(Interpreter Pattern):定义语言的文法,并且建立一个解释器来解释改语言中的句子,这里的“语言”意思是规定格式和语法的代码,所以解释器模式是一种类行为型模式...,如使用“|”表示或,使用“{”和“}”表示组合,使用“*”表示出现0次或多次等,其中使用频率最高的符号是表示或关系的“|” 。...除了使用文法规则来定义一个语言,在解释器模式中还可以通过一种称之为抽象语法树(Abstract Syntax Tree, AST)的图形方式来直观地表示语言的构成,每一棵抽象语法树对应一个语言实例。...四、典型例子 典型的解释器模式例子: 抽象表达式类: public abstract class AbstractExpression { public abstract void interpret...TerminalExpression extends AbstractExpression { public void interpret(Context ctx) { //对于终结符表达式的解释操作

    38540

    【地铁上的设计模式】--行为型模式:解释器模式

    什么是解释器 解释器(Interpreter)是一种行为型设计模式,它用于解释一种特定的编程语言或表达式。...它提供了一种解释一组语言语法的方法,使得用户可以按照特定的规则定义自己的语言,并通过解释器将其转化成可执行代码。 在解释器模式中,包含两个角色:终结符和非终结符。...然而,解释器模式的缺点在于它可能会导致性能问题,因为它需要在解释器中进行大量的运算和计算。此外,解释器模式的设计较为复杂,需要开发者具备较强的编程能力和领域知识。...Expression),实现抽象表达式中的解释方法,用来解释语言中的终结符,通常是语言中的最小单位; 定义非终结符表达式类(Non-terminal Expression),也实现了抽象表达式的解释方法...,用来解释由多个终结符组成的复杂语言结构,它通常是由多个子表达式组成的; 定义环境类(Context),用来存储解释器解释时的状态,通常包含解释器解释时需要的数据; 客户端创建抽象语法树(Abstract

    28620

    行为型之解释器模式C++实现

    现实需求:有些问题多次重复出现,而且有一定的相似性和规律性。 解释器模式:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。...解释器模式中通常使用大量的循环和递归调用,当要解释的句子较复杂时,其运行速度很慢,且代码的调试过程也比较麻烦。 2. 可应用的场景比较少。 主要角色。...抽象表达式角色:定义解释器的接口,约定解释器的解释操作。 终结符表达式角色:抽象表达式的子类,实现文法中与终结符相关的操作。...非终结符表达式角色:抽象表达式的子类,实现文法中与非终结符相关的操作。 环境角色:包含各个解释器需要的数据或是公共的功能,一般用来传递被所有解释器共享的数据,后面的解释器可以从这里获取这些值。...客户端:用解释器的解释方法,通过环境角色间接访问解释器的解释方法。 具体案例:小码路接了公司一项目,为北大清华的学生制作出入证,先找到学校学生可以进步,如果找不到侧拒绝进入校园。

    30620

    线程不安全的SimpleDateFormat

    8.5 SimpleDateFormat是线程不安全的 SimpleDateFormat是Java提供的一个格式化和解析日期的工具类,日常开发中应该经常会用到,但是由于它是线程不安全的,多线程公用一个SimpleDateFormat...问题分析 为了便于分析首先奉上SimpleDateFormat的类图结构: ?...image.png 可知每个SimpleDateFormat实例里面有一个Calendar对象,从后面会知道其实SimpleDateFormat之所以是线程不安全的就是因为Calendar是线程不安全的...实例,步骤(3)在使用的时候首先使用get()方法获取当前线程下SimpleDateFormat的实例,在第一次调用ThreadLocal的get()方法适合会触发其initialValue方法用来创建当前线程所需要的...总结 本节通过简单介绍SimpleDateFormat的原理说明了SimpleDateFormat是线程不安全的,应该避免多线程下使用SimpleDateFormat的单个实例,多线程下使用时候最好使用

    1K40

    解释器模式 Interpreter 行为型 设计模式(十九)

    说的就是这个意思 意图 给定一个语言,定义他的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子。...@符号 正则表达式是用来解决字符串匹配的问题,他是解释器模式思维的一个运用实例 通过定义正则表达式的语法结构,进而通过表达式定义待匹配字符的集合,然后通过通用的算法来解释执行正则表达式 解释器模式将语法规则抽象出来...的实例变量; 实现解释操作,主要就是interpret()方法 解释操作以递归的方式调用上面所提到的代表R1R2...Rn中的各个符号的实例变量 上下文角色Context 包含解释器之外的一些全局信息,...“格式”这几个关键词 解释器模式将语法规则抽象的表述为类 解释器模式为自定义语言的设计和实现提供了一种解决方案,它用于定义一组文法规则并通过这组文法规则来解释语言中的句子。...Interpreter 行为型 设计模式(十九)

    54830

    使用SimpleDateFormat的时候小心点

    SimpleDateFormat是Java提供的一个格式化和解析日期的工具类,日常开发中应该经常会用到,但是由于它是线程不安全的,多线程公用一个SimpleDateFormat实例对日期进行解析或者格式化会导致程序出错...代码示例演示 写一段小Demo来模拟多线程下SimpleDateFormat做时间格式化的时候报错,代码如下: package com.vernon.test.demo.jdk.text; import...SimpleDateFormat的一个类关系图: 可知每个SimpleDateFormat实例里面有一个Calendar对象,从后面会知道其实SimpleDateFormat之所以是线程不安全的就是因为...第一种方式: 每次使用时候new一个SimpleDateFormat的实例,这样可以保证每个实例使用自己的Calendar实例,但是每次使用都需要new一个对象,并且使用后由于没有其它引用,就会需要被回收...SimpleDateFormat这个类不是线程安全的,在使用的时候稍不注意,就会产生致命的问题。Date这个类,是可以重新设置时间的,这对于一些类内部的属性来说,是非常不安全的。

    26410

    AI智能体使用日常语言生成解释其行为的原理

    佐治亚理工学院、康奈尔大学和肯塔基大学合作开发了一种AI智能体,可以实时自动生成自然语言解释,以传达其行为背后的动机。...这项工作旨在让人类与AI智能体或机器人合作,确保智能体正在正确地执行任务,并且可以解释错误或错误的行为。 智能体还使用非专家能够理解的日常语言。...“由于人工智能遍及我们生活的方方面面,因此非常需要以人为本的人工智能设计,使日常用户可以解释如同黑盒子的人工智能系统。我们需要理解基于语言的解释的作用以及如何让人类认识到它们。”...参与者根据以下因素判断原理: 信心:这个人对AI执行任务充满信心 类人的:看起来像是由人类做出决定 充分的理由:充分证明采取的行动是正确的 可理解性:帮助人们理解AI的行为 AI生成的理论,在参与者中排名较高...回应显示,人们欣赏人工智能对未来步骤的思考,而不仅仅是思考当下的事情,这可能会让他们更容易犯另一个错误。人们也想知道更多,这样他们就可以直接帮助人工智能纠正错误行为。

    87220

    人工智能的黑暗秘密:如何让AI解释自身行为?

    受人脑的启发,一个人工神经网络依赖于“神经元”之间的成千上万个微小的连接,或者是小范围一串串的数学计算,这类似于大脑中神经元的连接系统。...因此,如果我们想让机器学习发挥作用,那么让机器执行这些任务的人需要了解它需要做什么,为什么要去做这个行为,因为如果机器人不知道自己为什么要做出选择,人们为什么会信任它来控制他们昂贵的火星探测器或轨道飞行器呢...由于某些粒子在这台机器上与像其他一般的粒子表现的不一样,他的任务是追踪某个粒子穿过一盒氙气的过程。 他的顾问建议尝试使用神经网络来进行监测,而神经网络在当时还是一种比较模糊的概念。...解读能力 不过微软研究人员Wallach说,要在解释性语言能力上开辟新领域,最大的挑战之一就是怎样简单地定义它。...取得这一成功意味着尽管人工智能是一个复杂的产物,但将神经网络的工作转化为人类所理解的东西并非是不可能的事情。

    94290

    Java中的SimpleDateFormat方法分析

    Java中的SimpleDateFormat方法分析 先进行专栏介绍 本专栏是自己学Java的旅途,纯手敲的代码,自己跟着黑马课程学习的,并加入一些自己的理解,对代码和笔记 进行适当修改。...SimpleDateFormat方法 在Java中,SimpleDateFormat类是用于日期格式化和解析的类。它位于java.text包中。...分析 SimpleDateFormat SimpleDateFormat是一个用于区域设置敏感的方式格式化和解析日期的具体类 日期和时间格式由日期和时间模式字符串指定,在日期和时间模式字符串中, 从...’A’到’Z’以及从‘a’到’z’引号中的字母被解释为表示日期或时间字符串的组成部分的模式字母 常用模式字母 y 年 M 月 d 日 H 时 m 分 s 秒 举例 2021年10月27日11:11:...为了解决这个问题,我们可以使用ThreadLocal来确保每个线程都有自己的SimpleDateFormat对象。 是SimpleDateFormat对于日期格式的解析是宽松的。

    21130

    设计模式(二十三):行为型之解释器模式

    提供了代理、适配器、桥接、装饰、外观、享元、组合 7 种结构型模式 行为型模式 用于描述类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,以及怎样分配职责 提供了模板方法、策略、命令、职责链...、状态、观察者、中介者、迭代器、访问者、备忘录、解释器 11 种行为型模式 二、解释器模式 1、概述 如上图,设计一个软件用来进行加减计算 我们第一想法就是使用工具类,提供对应的加法和减法的工具方法 /...如果把运算符和数字都看作节点的话,能够逐个节点的进行读取解析运算,这就是解释器模式的思维 定义 给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子 文法(语法...,引号外为语法 2、结构 解释器模式包含以下主要角色: 抽象表达式(Abstract Expression)角色:定义解释器的接口,约定解释器的解释操作,主要包含解释方法 interpret() 终结符表达式...,后面的解释器可以从这里获取这些值 客户端(Client):主要任务是将需要分析的句子或表达式转换成使用解释器对象描述的抽象语法树,然后调用解释器的解释方法,当然也可以通过环境角色间接访问解释器的解释方法

    7410

    还在使用 SimpleDateFormat?你的项目崩没?

    主要是用它进行时间的格式化输出和解析,挺方便快捷的,但是SimpleDateFormat并不是一个线程安全的类。在多线程情况下,会出现异常,想必有经验的小伙伴也遇到过。...下面我们就来分析分析SimpleDateFormat为什么不安全?是怎么引发的?以及多线程下有那些SimpleDateFormat的解决方案?...先看看《阿里巴巴开发手册》对于SimpleDateFormat是怎么看待的: ?...多线程不安全原因 因为我们吧SimpleDateFormat定义为静态变量,那么多线程下SimpleDateFormat的实例就会被多个线程共享,B线程会读取到A线程的时间,就会出现时间差异和其它各种问题...SimpleDateFormat和它继承的DateFormat类也不是线程安全的 来看看SimpleDateFormat的format()方法的源码 // Called from Format after

    44230

    【详解】SimpleDateFormat类的线程安全问题

    SimpleDateFormat类的线程安全问题在Java编程中,​​SimpleDateFormat​​ 是一个非常常用的日期格式化工具类。它可以用来将日期转换成字符串,也可以将字符串解析成日期。...然而,在多线程环境中使用 ​​SimpleDateFormat​​ 时,会遇到线程安全的问题,这可能导致程序运行结果的不确定性或错误。1. 什么是线程安全?...SimpleDateFormat为什么不是线程安全的?​​SimpleDateFormat​​ 不是线程安全的主要原因在于它的内部状态会在格式化或解析日期时被修改。...SimpleDateFormat​​是 Java 中用于日期格式化和解析的类,但它不是线程安全的。在多线程环境中使用​​​SimpleDateFormat​​时,可能会导致不可预测的结果或异常。...SimpleDateFormat​​ 是 Java 中用于格式化和解析日期的一个类。它非常方便使用,但有一个重要的缺点:它不是线程安全的。

    7700

    还在使用 SimpleDateFormat?你的项目崩没?

    主要是用它进行时间的格式化输出和解析,挺方便快捷的,但是SimpleDateFormat并不是一个线程安全的类。在多线程情况下,会出现异常,想必有经验的小伙伴也遇到过。...下面我们就来分析分析SimpleDateFormat为什么不安全?是怎么引发的?以及多线程下有那些SimpleDateFormat的解决方案?...先看看《阿里巴巴开发手册》对于SimpleDateFormat是怎么看待的: ?...多线程不安全原因 因为我们吧SimpleDateFormat定义为静态变量,那么多线程下SimpleDateFormat的实例就会被多个线程共享,B线程会读取到A线程的时间,就会出现时间差异和其它各种问题...SimpleDateFormat和它继承的DateFormat类也不是线程安全的 来看看SimpleDateFormat的format()方法的源码 copy// Called from Format

    61220
    领券