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实现在windows下操作word的方法
Apr 28 Python
Python中集合的内建函数和内建方法学习教程
Aug 19 Python
python实现按行切分文本文件的方法
Apr 18 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
Oct 20 Python
python机器学习实战之树回归详解
Dec 20 Python
基于python实现学生管理系统
Oct 17 Python
解决pycharm上的jupyter notebook端口被占用问题
Dec 17 Python
Python猜数字算法题详解
Mar 01 Python
python读取mysql数据绘制条形图
Mar 25 Python
python 双循环遍历list 变量判断代码
May 04 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 Python
总结Python变量的相关知识
Jun 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
冰滴咖啡制作步骤
2021/03/03 冲泡冲煮
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
javascript 学习之旅 (2)
2009/02/05 Javascript
JavaScript常用对象的方法和属性小结
2012/01/24 Javascript
JS小游戏之宇宙战机源码详解
2014/09/25 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
ES6新特征数字、数组、字符串
2016/10/01 Javascript
使用Angular缓存父页面数据的方法
2017/01/03 Javascript
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
2017/07/03 Javascript
原生JS控制多个滚动条同步跟随滚动效果
2017/12/22 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
vue滑动吸顶及锚点定位的示例代码
2020/05/10 Javascript
Vue中父子组件的值传递与方法传递
2020/09/28 Javascript
vue el-upload上传文件的示例代码
2020/12/21 Vue.js
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
python编程羊车门问题代码示例
2017/10/25 Python
对Tensorflow中的变量初始化函数详解
2018/07/27 Python
解决Django生产环境无法加载静态文件问题的解决
2019/04/23 Python
python 画二维、三维点之间的线段实现方法
2019/07/07 Python
Pytorch .pth权重文件的使用解析
2020/02/14 Python
浅谈ROC曲线的最佳阈值如何选取
2020/02/28 Python
使用Python爬取弹出窗口信息的实例
2020/03/14 Python
python如何更新包
2020/06/11 Python
Python paramiko使用方法代码汇总
2020/11/20 Python
CSS3+DIV实现漂亮的动画彩色标签
2016/06/16 HTML / CSS
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
Ever New加拿大官网:彰显女性美
2018/10/05 全球购物
Street One瑞士:德国现代时装公司
2019/10/09 全球购物
应聘自荐书
2013/10/08 职场文书
军训自我鉴定范文
2014/02/13 职场文书
法学专业毕业生求职信
2014/06/12 职场文书
商务经理岗位职责
2014/07/30 职场文书
python编程学习使用管道Pipe编写优化代码
2021/11/20 Python
 分享一个Python 遇到数据库超好用的模块
2022/04/06 Python
vue如何清除浏览器历史栈
2022/05/25 Vue.js