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的文件操作方法汇总
Nov 10 Python
Flask框架各种常见装饰器示例
Jul 17 Python
python使用matplotlib绘制热图
Nov 07 Python
Python3多线程基础知识点
Feb 19 Python
Django接收自定义http header过程详解
Aug 23 Python
python 进程 进程池 进程间通信实现解析
Aug 23 Python
Python爬取腾讯视频评论的思路详解
Dec 19 Python
Python PyPDF2模块安装使用解析
Jan 19 Python
python3中sys.argv的实例用法
Apr 24 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
Jun 02 Python
pycharm导入源码的具体步骤
Aug 04 Python
pandas针对excel处理的实现
Jan 15 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自定义函数收代码
2010/08/01 PHP
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
推荐5款跨平台的PHP编辑器
2014/12/25 PHP
详解Yii实现分页的两种方法
2017/01/14 PHP
PHP 进度条函数的简单实例
2017/09/19 PHP
PHP PDOStatement::fetch讲解
2019/01/31 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
获取Javscript执行函数名称的方法
2006/12/22 Javascript
js处理json以及字符串的比较等常用操作
2013/09/08 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
微信小程序 地图定位简单实例
2016/10/14 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
原生js封装自定义滚动条
2017/03/24 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
深入了解javascript 数组的sort方法
2018/06/01 Javascript
webpack4实现不同的导出类型
2019/04/09 Javascript
详解用js代码触发dom事件的实现方案
2020/06/10 Javascript
js面向对象方式实现拖拽效果
2021/03/03 Javascript
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
2019/04/15 Python
python入门:argparse浅析 nargs='+'作用
2020/07/12 Python
Python 实现微信自动回复的方法
2020/09/11 Python
python/golang 删除链表中的元素
2020/09/14 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
Omio荷兰:预订火车、巴士和机票
2018/11/04 全球购物
公司JAVA开发面试题
2015/04/02 面试题
标准导师推荐信(医学类)
2013/10/28 职场文书
预备党员党课思想汇报
2014/01/13 职场文书
司马光教学反思
2014/02/01 职场文书
工作睡觉检讨书
2014/02/25 职场文书
社区戒毒工作方案
2014/06/04 职场文书
艺术学院毕业生自荐信
2014/07/05 职场文书
大学生见习报告总结
2014/11/04 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
javaScript Array api梳理
2021/03/31 Javascript
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python