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中为什么要用self探讨
Apr 14 Python
Python使用爬虫爬取静态网页图片的方法详解
Jun 05 Python
python利用插值法对折线进行平滑曲线处理
Dec 25 Python
Python enumerate函数功能与用法示例
Mar 01 Python
手把手教你使用Python创建微信机器人
Apr 29 Python
python与字符编码问题
May 24 Python
python画图——实现在图上标注上具体数值的方法
Jul 08 Python
OpenCV3.0+Python3.6实现特定颜色的物体追踪
Jul 23 Python
Django错误:TypeError at / 'bool' object is not callable解决
Aug 16 Python
利用Python脚本批量生成SQL语句
Mar 04 Python
解决Pytorch半精度浮点型网络训练的问题
May 24 Python
Python内置的数据类型及使用方法
Apr 13 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
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
在smarty中调用php内置函数的方法
2013/02/07 PHP
phpcms模块开发之swfupload的使用介绍
2013/04/28 PHP
php获取远程文件内容的函数
2015/11/02 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
[原创]js与自动伸缩图片 自动缩小图片的多浏览器兼容的方法总结
2007/03/12 Javascript
newxtree.js代码
2007/03/13 Javascript
Javascript中的常见排序算法
2007/03/27 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
js与运算符和或运算符的妙用
2014/02/14 Javascript
jquery.mobile 共同布局遇到的问题小结
2015/02/10 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
JavaScript驾驭网页-DOM
2016/03/24 Javascript
AngularJS中实现用户访问的身份认证和表单验证功能
2016/04/21 Javascript
移动端利用H5实现压缩图片上传功能
2017/03/29 Javascript
微信小程序 判断手机号的实现代码
2017/04/19 Javascript
解决在Bootstrap模糊框中使用WebUploader的问题
2018/03/22 Javascript
JS实现HTML页面中动态显示当前时间完整示例
2018/07/30 Javascript
微信小程序自定义toast弹窗效果的实现代码
2018/11/15 Javascript
JS获取月的第几周和年的第几周实例代码
2018/12/05 Javascript
vue自定义js图片碎片轮播图切换效果的实现代码
2019/04/28 Javascript
微信小程序背景音乐开发详解
2019/12/12 Javascript
python学习笔记:字典的使用示例详解
2014/06/13 Python
在Python中操作文件之read()方法的使用教程
2015/05/24 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
Python 根据日志级别打印不同颜色的日志的方法示例
2019/08/08 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
2020/01/10 Python
MSC邮轮官方网站:加勒比海、地中海和世界各地的假期
2018/08/27 全球购物
小学生五年级大队长竞选发言稿
2014/09/12 职场文书
保安2014年终工作总结
2014/12/06 职场文书
房屋租赁意向书范本
2015/05/09 职场文书
法人身份证明书
2015/06/18 职场文书
爱护公物主题班会
2015/08/17 职场文书
入团申请书格式
2019/06/20 职场文书
CSS3 实现NES游戏机的示例代码
2021/04/21 HTML / CSS
Python如何识别银行卡卡号?
2021/06/10 Python