Python设计模式之命令模式简单示例


Posted in Python onJanuary 10, 2018

本文实例讲述了Python设计模式之命令模式。分享给大家供大家参考,具体如下:

命令模式介绍:

在面向对象编程中,命令模式是概括所有方法信息的设计模式。

此模式对象包涵方法名,及其相关参数值。

命令模式是一个分类的观察者设计模式,在命令模式下,对象被概括为一个命令表单,此表单包涵了所有用户需要的方法。

举个例子:如果有个按钮是用户接口“red”,当被触碰的时候,会启动后台的“turn red”接口。现在用户并不知道,通过什么类或者方法的接口能够让后台处理“turn red”操作,但是这个命令被发送了(触碰“red”按钮),会使得后台处理“turn red”操作。因此,命令模式给用户一个接口,而不用让用户了解哪些是实际执行的程序,也不会影响到用户程序。

实现命令模式的关键就是让调用者不要包涵底层实际命令执行代码,相同的调用者应该采用相同的接口。

命令模式是由三个组件构成,客户,调用者,接受者。

客户:一个实例化的对象

调用者:决定哪个方法被调用

接受者:实际命令的执行者

Python设计模式之命令模式简单示例

Example:

实现一个开关
切换ON/OFF
用开关ON/OFF去硬编码一个事件

代码如下:

class Switch:
 ''' The INVOKER class'''
 def __init__(self, flipUpCmd, flipDownCmd):
  self.__flipUpCommand = flipUpCmd
  self.__flipDownCommand = flipDownCmd
 def flipUp(self):
  self.__flipUpCommand.execute()
 def flipDown(self):
  self.__flipDownCommand.execute()
class Light:
 '''The RECEIVER Class'''
 def turnOn(self):
  print "The light is on"
 def turnOff(self):
  print "The light is off"
class Command:
 """The Command Abstrace class"""
 def __init__(self):
  pass
 def execute(self):
  pass
class FlipUpCommand(Command):
 '''The Command class for turning on the light'''
 def __init__(self, light):
  self.__light = light
 def execute(self):
  self.__light.turnOn()
class FileDownCommand(Command):
 '''The Command class for turning off the light'''
 def __init__(self, light):
  Command.__init__(self)
  self.__light = light
 def execute(self):
  self.__light.turnOff()
class LightSwitch:
 '''The Client Class'''
 def __init__(self):
  self.__lamp = Light()
  self.__switchUp = FlipUpCommand(self.__lamp)
  self.__switchDown = FileDownCommand(self.__lamp)
  self.__switch = Switch(self.__switchUp, self.__switchDown)
 def switch(self, cmd):
  cmd = cmd.strip().upper()
  try:
   if cmd == "ON":
    self.__switch.flipUp()
   elif cmd == "OFF":
    self.__switch.flipDown()
   else:
    print "Argument \"ON\" or \"OFF\" is required"
  except Exception,msg:
   print "Exception occured:%s" % msg
#Execute if the file is run as a script and not imported as a module
if __name__ == "__main__":
 lightSwitch = LightSwitch()
 print "Switch ON test"
 lightSwitch.switch("ON")
 print "Switch OFF test"
 lightSwitch.switch("OFF")
 print "Invalid Command test"
 lightSwitch.switch("****")

运行结果:

Python设计模式之命令模式简单示例

总结:面向对象的方法,就是这么牛叉啊,代码看得让人头晕,层层的封装。警惕面向对象编程的过度对象化。

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python中的__init__ 、__new__、__call__小结
Apr 25 Python
从零学Python之引用和类属性的初步理解
May 15 Python
详解Python读取配置文件模块ConfigParser
May 11 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
Apr 02 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
Apr 08 Python
python 地图经纬度转换、纠偏的实例代码
Aug 06 Python
学习Django知识点分享
Sep 11 Python
Python Handler处理器和自定义Opener原理详解
Mar 05 Python
浅谈python3打包与拆包在函数的应用详解
May 02 Python
matplotlib基础绘图命令之bar的使用方法
Aug 13 Python
Python通过队列来实现进程间通信的示例
Oct 14 Python
Python PIL按比例裁剪图片
May 11 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
Jan 10 #Python
Python之多线程爬虫抓取网页图片的示例代码
Jan 10 #Python
Python设计模式之观察者模式简单示例
Jan 10 #Python
Python爬虫实例_城市公交网络站点数据的爬取方法
Jan 10 #Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
Jan 10 #Python
Python tornado队列示例-一个并发web爬虫代码分享
Jan 09 #Python
Python中join函数简单代码示例
Jan 09 #Python
You might like
php中的三元运算符使用说明
2011/07/03 PHP
php中取得文件的后缀名?
2012/02/20 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
PHP开发中常见的安全问题详解和解决方法(如Sql注入、CSRF、Xss、CC等)
2014/04/21 PHP
php字符串截取函数用法分析
2014/11/25 PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
2016/02/26 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
JavaScript中的apply和call函数详解
2014/07/20 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
2015/04/17 Javascript
javascript字符串循环匹配实例分析
2015/07/17 Javascript
实例讲解js验证表单项是否为空的方法
2016/01/09 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
详解vue.js 开发环境搭建最简单攻略
2017/06/12 Javascript
JavaScript语句错误throw、try及catch实例解析
2020/08/18 Javascript
[01:00:14]DOTA2官方TI8总决赛纪录片 真视界True Sight
2019/01/16 DOTA
[01:31:02]TNC vs VG 2019国际邀请赛淘汰赛 胜者组赛BO3 第一场
2019/08/22 DOTA
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
Python字符串处理函数简明总结
2015/04/13 Python
关于Python中异常(Exception)的汇总
2017/01/18 Python
python3.4用函数操作mysql5.7数据库
2017/06/23 Python
python中通过预先编译正则表达式提高效率
2017/09/25 Python
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
美国领先的低折扣旅行网站:Hotwire
2019/01/19 全球购物
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
银行毕业实习自我鉴定
2013/09/19 职场文书
环保守法证明
2015/06/24 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书
机关单位2016年创先争优活动总结
2016/04/05 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript
德劲DE1105机评
2022/04/05 无线电
VUE使用draggable实现组件拖拽
2022/04/06 Vue.js