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实现协同过滤的教程
Apr 08 Python
python使用nntp读取新闻组内容的方法
May 08 Python
Python字符串格式化
Jun 15 Python
浅谈python中列表、字符串、字典的常用操作
Sep 19 Python
详解Python自建logging模块
Jan 29 Python
python实现屏保程序(适用于背单词)
Jul 30 Python
Python如何使用bokeh包和geojson数据绘制地图
Mar 21 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
Apr 17 Python
Python如何实现后端自定义认证并实现多条件登陆
Jun 22 Python
Scrapy-Redis之RedisSpider与RedisCrawlSpider详解
Nov 18 Python
python IP地址转整数
Nov 20 Python
Python3爬虫ChromeDriver的安装实例
Feb 06 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
DSP接收机前端设想
2021/03/02 无线电
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
解析在PHP中使用全局变量的几种方法
2013/06/24 PHP
Ubuntu中启用php的mail()函数并解决发送邮件速度慢问题
2015/03/27 PHP
PHP中的Trait 特性及作用
2016/04/03 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
js 全兼容可高亮二级缓冲折叠菜单
2010/06/04 Javascript
javaScript的函数对象的声明详解
2015/02/06 Javascript
JavaScript中setUTCFullYear()方法的使用简介
2015/06/12 Javascript
浅谈JS中json数据的处理
2016/06/30 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
javascript history对象详解
2017/02/09 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
2018/09/30 Javascript
JavaScript页面倒计时功能完整示例
2019/05/15 Javascript
javascript实现blob加密视频源地址的方法
2019/08/08 Javascript
[49:11]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.20
2020/12/23 DOTA
用python写个自动SSH登录远程服务器的小工具(实例)
2017/06/17 Python
Python操作MongoDB数据库的方法示例
2018/01/04 Python
python使用Plotly绘图工具绘制气泡图
2019/04/01 Python
python使用flask与js进行前后台交互的例子
2019/07/19 Python
python正则表达式匹配不包含某几个字符的字符串方法
2019/07/23 Python
jupyter notebook 多环境conda kernel配置方式
2020/04/10 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
CSS3毛玻璃效果(blur)有白边问题的解决方法
2016/11/15 HTML / CSS
化验室技术员岗位职责
2013/12/24 职场文书
法人代表任命书范本
2014/06/05 职场文书
弄虚作假心得体会
2014/09/10 职场文书
2014年党员自我评价材料
2014/09/22 职场文书
县政协领导班子群众路线教育实践活动四风问题整改方案
2014/10/26 职场文书
幼儿园小班个人工作总结
2015/02/12 职场文书
电力企业职工培训心得体会
2016/01/11 职场文书
敬业奉献模范事迹材料(2016精选版)
2016/02/26 职场文书
导游词之台湾阿里山
2019/10/23 职场文书