定义

给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。解释器模式是一种类行为型模式。

优点:

  1. 扩展性好。由于在解释器模式中使用类来表示语言的文法规则,因此可以通过继承等机制来改变或扩展文法。
  2. 容易实现。在语法树中的每个表达式节点类都是相似的,所以实现其文法较为容易。

缺点:

  1. 执行效率较低。解释器模式中通常使用大量的循环和递归调用,当要解释的句子较复杂时,其运行速度很慢,且代码的调试过程也比较麻烦。
  2. 会引起类膨胀。解释器模式中的每条规则至少需要定义一个类,当包含的文法规则很多时,类的个数将急剧增加,导致系统难以管理与维护。
  3. 可应用的场景比较少。在软件开发中,需要定义语言文法的应用实例非常少,所以这种模式很少被使用到。

应用场景:

  1. 可以将一个需要解释执行的语言中的句子表示为一个抽象语法树。
  2. 一些重复出现的问题可以用一种简单的语言来进行表达。
  3. 一个简单语法需要解释的场景。

模型结构

  1. 抽象表达式(Abstract Expression)角色:定义解释器的接口,约定解释器的解释操作,主要包含解释方法 interpret()。
  2. 终结符表达式(Terminal    Expression)角色:是抽象表达式的子类,用来实现文法中与终结符相关的操作,文法中的每一个终结符都有一个具体终结表达式与之相对应。
  3. 非终结符表达式(Nonterminal Expression)角色:也是抽象表达式的子类,用来实现文法中与非终结符相关的操作,文法中的每条规则都对应于一个非终结符表达式。
  4. 环境(Context)角色:通常包含各个解释器需要的数据或是公共的功能,一般用来传递被所有解释器共享的数据,后面的解释器可以从这里获取这些值。
  5. 客户端(Client):主要任务是将需要分析的句子或表达式转换成使用解释器对象描述的抽象语法树,然后调用解释器的解释方法,当然也可以通过环境角色间接访问解释器的解释方法。

参考:

(1)解释器模式(详解版)  http://c.biancheng.net/view/1402.html

(2)解释器模式  https://www.runoob.com/design-pattern/interpreter-pattern.html

行为型模式(7)——解释器模式相关推荐

  1. 行为型模式:解释器模式

    原文首发: 行为型模式:解释器模式 十一大行为型模式之十:解释器模式. 简介 姓名 :解释器模式 英文名 :Interpreter Pattern 价值观 :不懂解释到你懂​ 个人介绍 : Given ...

  2. 设计模式之观察者模式、中介者模式、迭代器模式、访问者模式、备忘录模式、解释器模式

    前言 这是设计模式的最后一章,包含了剩余的 行为型模式 中的 观察者模式.中介者模式.迭代器模式.访问者模式.备忘录模式.解释器模式 系列文章 第一章:7种设计原则之单一职责原则.接口隔离原则.依赖倒 ...

  3. 十三、中介者模式与解释器模式详解

    19.中介者模式 19.1.课程目标 1.掌握中介者模式和解释器模式的应用场景. 2.了解设计群聊的底层逻辑. 3.掌握解析表达式的基本原理. 4.理解中介者模式和解释器模式的优缺点. 19.2.内容 ...

  4. 图解Java设计模式学习笔记——行为型模式(模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式)

    一.模板方法模式(模板模式)--钩子方法 1.需求-豆浆制作问题 编写制作豆浆的程序,说明如下: 制作豆浆的流程选材-->添加配料-->浸泡-->放到豆浆机打碎. 通过添加不同的配料 ...

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

    结构 意图 给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. 适用性 当有一个语言需要解释执行, 并且你可将该语言中的句子表示为一个抽象语法树时,可使用 ...

  6. 三、行为型模式【访问者模式、备忘录模式、命令模式、解释器模式、中介模式】

    访问者模式 允许一个或者多个操作应用到一组对象上,解耦操作和对象本身,保持类职责单一.满足开闭原则以及应对代码的复杂性. 多态是一种动态绑定,可以在运行时获取对象的实际类型,来运行实际类型对应的方法. ...

  7. 设计模式之美——行为型3:迭代模式、访问者模式、命令模式、解释器模式、中介模式

    迭代器模式 迭代器模式的原理和实现 迭代器模式(Iterator Design Pattern),也叫作游标模式(Cursor Design Pattern). 迭代器模式.它用来遍历集合对象.这里说 ...

  8. Java设计模式(九)—中介者模式、备忘录模式、解释器模式

    本章目录标题 第21章 中介者模式 21.1 应用场景:智能家居 21.2 传统方式 21.3 中介者模式 21.4 应用案例:智能家居 21.5 中介者模式的注意事项 第22章 备忘录模式 22.1 ...

  9. 设计模式8(享元模式,解释器模式)

    享元模式 对象的缓冲池,共享内部状态相同的对象,类似幼儿园系统中缓存的Query 解释器模式 定义一个上下文,并对其进行解释执行 转载于:https://www.cnblogs.com/jspdelp ...

  10. 大话设计模式之爱你一万年:第二十三章 行为模式:解释器模式:在也不用担心工资计算错误了:3.解释器模式之简单计算器3.0

    上面的在上面的这个代码中,我们目前并没有看出解释器模式的优势,感觉代码反而变复杂了呐,引入了好几个类. 我们发现在的计算器只能解释a+b这种类型的表达式,如果表达式是a+b+c- 的呢,上面的代码就无 ...

最新文章

  1. 第一篇:text preprocessing文本预处理
  2. React 表单与事件
  3. POJ 2155 Matrix 二维线段树
  4. 正反案例介绍SOLID原则
  5. 具有Java 8支持的Spring Framework 4.0.3和Spring Data Redis 1.2.1
  6. java zero copy 实现,关于Zero Copy
  7. 信使(信息学奥赛一本通-T1376)
  8. centos7查看安装的是64位系统还是32位系统---linux工作笔记043
  9. WPF中一个控件绑定另一个控件的属性
  10. cl_salv_table
  11. 学习Java随记之swing编程(2)
  12. python airflow_airflow python 包采坑指南
  13. mysql查询市区县_通过数据库获取省份城市区县的名字
  14. 信号与系统 --- 复指数函数(个人学习笔记)
  15. html+css练手项目3
  16. replace() 替换的整理
  17. 关于置信度和置信区间的解释
  18. 商城App接入快递100
  19. 教你一招:低代码开发平台实现抗疫物资管理系统的搭建
  20. xp安装64位vista_使用Vista 64作为打印服务器的其他自动打印机驱动程序安装

热门文章

  1. vue3.0 实现旋转木马
  2. 同步读取文件和异步读取文件的区别
  3. 什么是C++虚函数、虚函数的作用和使用方法
  4. sorl的分页数据设计
  5. Vue使用虚拟键盘+中英文切换
  6. 偏度和峰度描述什么_什么是偏度和峰度
  7. 日记类App原型制作分享-Grid Diary
  8. 怎么在指定文件夹打开cmd
  9. [中兴建设有限公司安徽分公司](https://www.zxjsah.cn)
  10. Windows中安装iPhone开发环境