Python设计模式-解释器模式

代码基于3.5.2,代码如下;

#coding:utf-8
#解释器模式class PlayContext():play_text = Noneclass Expression():def interpreter(self,context):if len(context.play_text) == 0:returnelse:play_segs = context.play_text.split(" ")for play_seg in play_segs:pos = 0for ele in play_seg:if ele.isalpha():pos += 1continuebreakplay_chord = play_seg[0:pos]play_value = play_seg[pos:]self.execute(play_chord,play_value)def execute(self,play_key,play_value):passclass NormGuitar(Expression):def execute(self,play_key,play_value):print("Normal Guitar Playing--Chord:{0} Play Tune:{1}".format(play_key,play_value))if __name__ == "__main__":context = PlayContext()context.play_text = "C521312413 D123123123 H23123123 Y123231231"guitar = NormGuitar()guitar.interpreter(context)

解释器模式分析与解读

解释器模式

解释器模式,给定一种语言,定义它的文法表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。典型的解释器模式中会有终结符和非终结符之说,语法也根据两种终结符,决定语句最终定义;如果一种特定类型的问题发生频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言的句子,这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。

代码解读

1、先定义了PlayContext类,该类主要实现对语句进行封装,该例子中,主要封装乐谱的谱子;
2、定义了Expression类,该类定义了并实现了interpreter方法,该方法主要是实现对PlayContext中封装的语句进行语法解析,即分析乐谱中的每个乐谱;解析完成后调用execute方法来执行解析完成后的执行函数;
3、NormGuitar继承自Expression类,并重写了execute方法,具体实现语法解析完成后的执行过程。

代码运行结果如下:

Normal Guitar Playing--Chord:C Play Tune:521312413
Normal Guitar Playing--Chord:D Play Tune:123123123
Normal Guitar Playing--Chord:H Play Tune:23123123
Normal Guitar Playing--Chord:Y Play Tune:123231231

解释器模式应用场景:

1、若一个问题重复发生,可以考虑使用解释器模式,这点在数据处理和日志处理过程中使用较多,当数据的需求方将数据保存时,必须将数据翻译成本系统的数据规格;
2、特定语言解释器,如各种解释型语言的解释器,再比如自然语言中基于语法的文本分析。

优缺点分析

优点

1、在语法分析的场景中,具有比较好的扩展性,规则修改和制定比较灵活。

缺点

1、解释规则多样化会导致解释器臃肿;
2、解释器目标比较单一,行为模式比较固定,因而重要的模块中尽量不要使用解释器模式;
3、解释器模式为文法中的每一条规则至少定义了一个类,因此包含许多规则的问法可能难以管理和维护,当文法非常复杂时,使用其他的技术如语法分析程序或编译器生成器来解决。

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

  1. Python设计模式-建造者模式

    Python设计模式-建造者模式 代码基于3.5.2,代码如下; #coding:utf-8 #建造者模式 class Burger():name = ""price = 0.0d ...

  2. Python设计模式-状态模式

    Python设计模式-状态模式 代码基于3.5.2,代码如下; #coding:utf-8 #状态模式class state():def writeProgram(self,work):raise N ...

  3. Python设计模式-备忘录模式

    Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...

  4. Python设计模式-命令模式

    Python设计模式-命令模式 代码基于3.5.2,代码如下; #coding:utf-8 #命令模式class barbecuer():def bakeButton(self):print(&quo ...

  5. Python设计模式-策略模式

    Python设计模式-策略模式 代码基于3.5.2,代码如下; #coding:utf-8 #策略模式class sendInterface():def send(self,value):raise ...

  6. Python设计模式-外观模式

    Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...

  7. Python设计模式-桥接模式

    Python设计模式-桥接模式 基于Python3.5.2,代码如下 #coding:utf-8class Shape():name = ""param = "" ...

  8. Python设计模式-代理模式

    Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...

  9. 设计模式 | 解释器模式及典型应用

    微信原文:设计模式 | 解释器模式及典型应用 博客原文:设计模式 | 解释器模式及典型应用 本文主要介绍解释器模式,在日常开发中,解释器模式的使用频率比较低 解释器模式 解释器模式(Interpret ...

最新文章

  1. MvcScaffold快速开发实例
  2. c语言 指针 数组还能这么用 ?
  3. 密码编码学之数字签名
  4. 使用rsync无密码传输
  5. How to Install Jdownloader on Ubuntu
  6. python 批量爬取网页pdf_python爬取网页内容转换为PDF文件
  7. wsimport的使用
  8. [資源]RAID是什么意思?RAID的应用
  9. IntelliJ IDEA设置方法注释模板并解决入参和返回值为空问题
  10. Python:PDF转PNG(6行代码搞定)
  11. 利用MapReduce计算运营商上行下行流量
  12. 利用python进行数据分析_从删库到跑路
  13. 有趣的新闻(1):你见过贝加尔湖冰冻气泡吗?
  14. 网络通讯端口为什么要设计浪涌保护电路
  15. 2023最新Vue 面试题+详解答案
  16. 重磅---基于App Inventor开发的蓝牙RSSI测量基站距离的手机应用软件
  17. 常见的Android数据传递方法汇总
  18. (15)点云数据处理学习——单目深度估计获得RGBD图再重建点云
  19. Johnson–Lindenstrauss Lemma(2)attention
  20. 网址和URL之间的区别:什么是RUI、RUL、URN

热门文章

  1. 预训练时代微调新范式,高性能加速2800%,NLPer赶紧看过来!
  2. Python 解一道江苏 小升初 数学题,如此变态,看不起来谁?
  3. 让数百万台手机训练同一个模型?Google把这套框架开源了
  4. 小米半年来最大调整:成立技术委员会,雷军称技术事关生死存亡
  5. 程序员崩溃了,年终奖怎么说黄就黄
  6. 为什么说可视化编程是糟糕的想法?
  7. 苹果智能音箱HomePod确定开售时间,权威人士质疑:是否太晚?
  8. 还在写大量 if 来判断?试试用一个规则执行器来替代它
  9. 为什么ElasticSearch比MySQL更适合复杂条件搜索
  10. 12 个超燃的 IntelliJ IDEA 插件!