此前已经将创造型模式、结构性模式分享了,后面将分享模式设计中的另一种典型模式:行为型模式。

创造型模式是解决实体的生成问题、结构性模式是为了解决实体的组合、搭配问题 ,而行为型设计模式的出现是为了解决不同实体通信的问题。

解释器模式:开发者自定义一种“有内涵”的语言(或者叫字符串),并设定相关的解释规则,输入该字符串后可以输出公认的解释,或者执行程序可以理解的动作。这种模式被用在 SQL 解析、符号处理引擎等

解释器模式要实现两个核心角色:

  • 终结符表达式:实现与文法中的元素相关联的解释操作,通常一个解释器模式中只有一个终结符表达式,但有多个实例,对应不同的终结符。终结符一半是文法中的运算单元,比如有一个简单的公式R=R1+R2,在里面R1和R2就是终结符,对应的解析R1和R2的解释器就是终结符表达式。

  • 非终结符表达式:文法中的每条规则对应于一个非终结符表达式,非终结符表达式一般是文法中的运算符或者其他关键字,比如公式R=R1+R2中,+就是非终结符,解析+的解释器就是一个非终结符表达式。非终结符表达式根据逻辑的复杂程度而增加,原则上每个文法规则都对应一个非终结符表达式。

# -*- coding:utf-8 -*-import timeimport datetime

"""实现一段简单的中文编程"""

class Code:"""自定义语言"""def __init__(self, text=None):self.text = text

class InterpreterBase:"""自定义解释器基类"""def run(self, code):pass

class Interpreter(InterpreterBase):"""实现解释器方法,实现终结符表达式字典"""def run(self, code):code = code.textcode_dict = {'获取当前时间戳': time.time(), "获取当前日期": datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")}print(code_dict.get(code))

if __name__ == '__main__':test = Code()test.text = '获取当前时间戳'data1 = Interpreter().run(test)test.text = '获取当前日期'data2 = Interpreter().run(test)

-----------------1550156061.11817072019-02-14 22:54:21

上面是个很简单的案例,同时我们也可以增加不同语言和不同的功能。

  • 主要解决:对于一些固定文法构建一个解释句子的解释器。

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

  • 应用实例:编译器、运算表达式计算。

  • 优点: 1、可扩展性比较好,灵活。 2、增加了新的解释表达式的方式。 3、易于实现简单文法。

  • 缺点: 1、可利用场景比较少。 2、对于复杂的文法比较难维护。 3、解释器模式会引起类膨胀。

但实际上该模式的应用场景比较少

python设计模式(十三):解释器模式相关推荐

  1. Python设计模式:解释器模式

    设计模式十三:解释器模式 什么是解释器模式 主要放向:让非初级用户和领域专家使用一门简单的语言来表达想法 一般是高级用户才会有所兴趣. 典型案例 音乐演奏者是现实中解释器模式的例子, 五线谱图形化地表 ...

  2. python实现解释器_Python设计模式之解释器模式

    解释器模式 对每个应用来说,至少有以下两种不同的用户分类. 基本用户:这类用户只希望能够凭直觉使用应用.他们不喜欢花太多时间配置或学习应用的内部.对他们来说,基本的用法就足够了. 高级用户:这些用户, ...

  3. Python设计模式-装饰器模式

    Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...

  4. Python设计模式-中介者模式

    Python设计模式-中介者模式 代码基于3.5.2,代码如下; #coding:utf-8 #中介者模式class colleague():mediator = Nonedef __init__(s ...

  5. Python设计模式-职责链模式

    Python设计模式-职责链模式 代码基于3.5.2,代码如下; #coding:utf-8 #职责链模式class Handler():def __init__(self):self.success ...

  6. Python设计模式-享元模式

    Python设计模式-享元模式 基于Python3.5.2,代码如下 #coding:utf-8class Coffee:name = ""price = 0def __init_ ...

  7. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  8. python策略模式包含角色_详解Python设计模式之策略模式

    虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...

  9. java 设计模式之解释器模式(十九)

    java 设计模式之解释器模式①⑨ 定义 角色分析 使用场景 代码实现 躁动的心灵,不安的灵魂.在彷徨中挣扎,在迷失中探索.时光飞逝,努力不变. 设计模式学习,近期我会把23种设计模式都写成博客,敬请 ...

  10. 北风设计模式课程---解释器模式(Interpreter Pattern)

    北风设计模式课程---解释器模式(Interpreter Pattern) 一.总结 一句话总结: 不仅要通过视频学,还要看别的博客里面的介绍,搜讲解,搜作用,搜实例 设计模式都是对生活的抽象,比如用 ...

最新文章

  1. 3.Tomact部署webapp
  2. delphi7下调用微软的Web Services的心得
  3. ArcGIS 10.x属性表乱码问题解决办法
  4. 实现一个压缩Remoting传输数据的Sink:CompressionSink (转载)
  5. 计算机专业很不稳定,浅谈计算机网络专业教学的创新因素:引起计算机系统不稳定的因素有哪些...
  6. INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113
  7. 什么使软件程序员成为专业人士?
  8. WebLogic 控制台乱码
  9. Leetcode 30.串联所有单词的子串
  10. ASP.NET页面的生命周期(转载)
  11. 449.序列化和反序列化二叉搜索树
  12. 专访尹毅(法师Seay):少年成名,野路子的奇妙逆袭 - FreeBuf.COM | 关注黑客与极客...
  13. 嵌入式linux/鸿蒙开发板(IMX6ULL)开发(九)第一个程序背后的C语言知识
  14. java定时器表达式_Java Quartz表达式每分钟执行1次
  15. 利用python进行TEQC质量检核结果绘图
  16. 51nod 巧克力 1429
  17. c++ double 截取_c++ double 截取_C/C++ double取余函数
  18. 一键批量替换文本工具
  19. 《Ensemble Learning Methods for Deep Learning Neural Networks》笔记
  20. 墨者学院PHP,墨者学院SQL注入解题

热门文章

  1. kvm安装及虚拟机创建
  2. 启用WebApi 2里的Api描述信息(Help下的Description)
  3. (纪录片)统计的乐趣 The Joy of Stats (2010)
  4. 保险业尚不能完全发挥CRM优势 需强化
  5. 操作无法完成.键入的打印机名不正确,或者指定的打印机没有连接到服务器上.有关详细信息,请单帮助...
  6. php 偷偷转移别人权重,判断百度蜘蛛偷偷进行301转移权重 给新站提权
  7. java中组件与容器_java中的容器组件和非容器组件
  8. Python自学路线图之Python进阶
  9. 文件服务器搭建 xp,xp文件服务器搭建
  10. 一键移植工具_【产品推广】让UI设计畅通无阻 — 信息系统人机界面增强工具(HFE Designer)...