1. 解释器模式(Interpreter)介绍

UML类图

角色介绍

  • Context:上下文环境,包含解释器之外的全局信息
  • Client:客户端,解析表达式,构建语法树,执行具体的解释操作等
  • AbstractExpression:抽象表达式,声明一个抽象的解释操作弗雷,并定义一个抽象的解释方案,其具体的实现在各个具体的子类解释器中完成。
  • TerminalExpression:终结符表达式,实现文法中终结符有关的解释操作。文法中每一个终结符都有一个具体的终结表达式与之对应。
  • NonterminalExpression:非终结表达式,实现文法中非终结符有关的解释操作。其中AbstractExpression的interpret()是抽象的解析方法,参数是上下文的环境,而interpret()方法的具体实现则由TerminalExpression和NonterminalExpression实现。

用途

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

在以下情况下可以使用解释器模式:

  • 有一个简单的语法规则,比如一个sql语句,如果我们需要根据sql语句进行rm转换,就可以使用解释器模式来对语句进行解释。
  • 一些重复发生的问题,比如加减乘除四则运算,但是公式每次都不同,有时是a+b-cd,有时是ab+c-d,等等等等个,公式千变万化,但是都是由加减乘除四个非终结符来连接的,这时我们就可以使用解释器模式。

2. 示例

"""Interpreter Pattern with Python Code
"""from abc import abstractmethod, ABCMeta# 抽象一个解释器类
class AbstractExpression(metaclass=ABCMeta):@abstractmethoddef interpreter(self, context):pass# 具体解释器——终端 继承抽象解释器
class TerminalExpression(AbstractExpression):def interpreter(self, context):print("终端解释器", context)# 具体解释器——非终端 继承抽象解释器
class NotTerminalExpression(AbstractExpression):def interpreter(self, context):print("非终端解释器", context)class Context(object):def __init__(self):self.name = ""class Client(object):def main(self):context = Context()context.name = 'Andy'arr_list = [NotTerminalExpression(),TerminalExpression(),TerminalExpression()]for entry in arr_list:entry.interpreter(context)if __name__ == "__main__":Client().main()

输出:

# ./Interpreter.py
非终端解释器 <__main__.Context object at 0x0000027193515460>
终端解释器 <__main__.Context object at 0x0000027193515460>
终端解释器 <__main__.Context object at 0x0000027193515460>

参考:
https://wiki.jikexueyuan.com/project/java-design-pattern/interpreter-pattern.html
https://www.cnblogs.com/onepiece-andy/p/python-interpreter-pattern.html
https://www.cnblogs.com/baxianhua/p/11160111.html

python设计模式15-解释器模式相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 从零打造聚合支付系统:一、浅谈聚合支付的核心价值
  2. Angular开发者指南(五)服务
  3. 网络路径无法访问问题的解决
  4. HDU 4162 Shape Number(最小表示法)
  5. 全排列算法原理和实现
  6. 手机照片导入电脑步骤_如何将手机中的照片、视频快速的保存到U盘上?3分钟教你详细步骤...
  7. 如何在 React Native 中写一个自定义模块
  8. Bifrost微前端框架及其在美团闪购中的实践
  9. java类型过滤文本_JAVA实现过滤掉文本中的表情
  10. [LeetCode]29 两数相除和一个小坑点
  11. 人工智能用python还是java_人工智能选择python还是java语言
  12. 腾讯微信惊天漏洞,利用手机号致帐号丢失无法找回!——论个人信息安全与防护...
  13. codeforces D. Palindrome pairs 动态规划
  14. 仿淘宝验证码 php,PHP中仿制 ecshop验证码实例
  15. 如何区分固态硬盘和机械硬盘
  16. 2023东华大学计算机考研信息汇总
  17. JAVA计算机毕业设计校园闲置物品信息管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
  18. 从事SQL相关工作者可以成为数据科学家吗
  19. 惯性导航原理(2):导航基础知识
  20. 前鼻音、后鼻音字对比;平、翘舌音的字对比;

热门文章

  1. openlayers入门开发系列之热力图篇
  2. 小博老师演示常用JQuery效果 ——图片轮播
  3. where常用运算符
  4. [android] 请求码和结果码的作用
  5. [Linux学习笔记] Linux历史发展与应用
  6. 人人都是 DBA(XI)I/O 信息收集脚本汇编(转)
  7. 多域型SSL证书和通配型证书安装指南- iis 6.0 (windows 2003)
  8. 基于DNS实现智能化访问网站
  9. Firefox 使用 Chrome 浏览器的 PDF 和 Flash 插件
  10. X权限 gpasswd getent 命令详解