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快速查找算法应用实例
Sep 26 Python
Python中装饰器的一个妙用
Feb 08 Python
python实现SMTP邮件发送功能
Jun 16 Python
分享几道你可能遇到的python面试题
Jul 24 Python
详解Python在七牛云平台的应用(一)
Dec 05 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
May 21 Python
python实现视频分帧效果
May 31 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
Aug 31 Python
Python matplotlib绘制饼状图功能示例
Sep 10 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
Feb 27 Python
全网首秀之Pycharm十大实用技巧(推荐)
Apr 27 Python
利用Python+OpenCV三步去除水印
May 28 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 数据结构 算法描述 冒泡排序 bubble sort
2011/07/10 PHP
php使用codebase生成随机数
2014/03/25 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
2014/08/19 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
a标签的css样式四个状态
2021/03/09 HTML / CSS
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
JavaScript 面向对象之命名空间
2010/05/04 Javascript
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
JS通过分析userAgent属性来判断浏览器的类型及版本
2014/03/28 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
js获得当前系统日期时间的方法
2015/05/06 Javascript
jQuery选择器及jquery案例详解(必看)
2016/05/20 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
原生js验证简洁注册登录页面
2016/12/17 Javascript
Extjs 中的 Treepanel 实现菜单级联选中效果及实例代码
2017/08/22 Javascript
vue-cli3.0+element-ui上传组件el-upload的使用
2018/12/03 Javascript
了解javascript中的Dom操作
2019/05/27 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
2020/03/25 Javascript
Python实现端口复用实例代码
2014/07/03 Python
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
Python 修改列表中的元素方法
2018/06/26 Python
CSS3线性渐变简单实现以及该属性在浏览器中的不同
2012/12/12 HTML / CSS
日本最大的药妆连锁店:Matsukiyo松本清药妆店
2017/11/23 全球购物
人力资源管理毕业生自荐信
2013/11/21 职场文书
教育孩子心得体会
2014/01/01 职场文书
暑期培训随笔感言
2014/03/10 职场文书
创先争优一句话承诺
2014/05/29 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
社会学专业求职信
2014/07/17 职场文书
教师求职自荐信范文
2015/03/04 职场文书
2016元旦晚会主持词
2015/07/01 职场文书
2019最新激励员工口号大全!
2019/06/28 职场文书
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS
浅谈Python numpy创建空数组的问题
2021/05/25 Python
详解thinkphp的Auth类认证
2021/05/28 PHP
用Python将GIF动图分解成多张静态图片
2021/06/11 Python