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动态网页批量爬取
Feb 14 Python
通过Python实现自动填写调查问卷
Sep 06 Python
Python subprocess模块功能与常见用法实例详解
Jun 28 Python
解决Python一行输出不显示的问题
Dec 03 Python
将python文件打包成EXE应用程序的方法
May 22 Python
Python关于__name__属性的含义和作用详解
Feb 19 Python
python实现飞机大战项目
Mar 11 Python
python实现俄罗斯方块小游戏
Apr 24 Python
Selenium及python实现滚动操作多种方法
Jul 21 Python
详解numpy.ndarray.reshape()函数的参数问题
Oct 13 Python
linux系统下pip升级报错的解决方法
Jan 31 Python
python编程实现清理微信重复缓存文件
Nov 01 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计算十二星座的函数代码
2012/08/21 PHP
php递归函数三种实现方法及如何实现数字累加
2015/08/07 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
Javascript 通过json自动生成Dom的代码
2010/04/01 Javascript
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
2014/04/20 Javascript
Boostrap栅格系统与自己额外定义的媒体查询的冲突问题
2017/02/19 Javascript
angular学习之ngRoute路由机制
2017/04/12 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
vue修改对象的属性值后页面不重新渲染的实例
2018/08/09 Javascript
webpack 如何解析代码模块路径的实现
2019/09/04 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
js实现跳一跳小游戏
2020/07/31 Javascript
[03:28]2014DOTA2国际邀请赛 走近EG战队天才中单Arteezy
2014/07/12 DOTA
python正常时间和unix时间戳相互转换的方法
2015/04/23 Python
Python中操作mysql的pymysql模块详解
2016/09/13 Python
Python实现破解12306图片验证码的方法分析
2017/12/29 Python
win7+Python3.5下scrapy的安装方法
2018/07/31 Python
python 运用Django 开发后台接口的实例
2018/12/11 Python
Python设计模式之解释器模式原理与用法实例分析
2019/01/10 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
学习和使用python的13个理由
2019/07/30 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
Django搭建项目实战与避坑细节详解
2020/12/06 Python
中专毕业个人的自荐信格式
2013/09/21 职场文书
追悼会子女答谢词
2014/01/28 职场文书
歌唱比赛主持词
2014/03/18 职场文书
珍惜资源保护环境的建议书
2014/05/14 职场文书
员工教育培训协议书
2014/09/27 职场文书
工作检讨书500字
2014/10/19 职场文书
个人先进事迹材料
2014/12/29 职场文书
2015年复活节活动总结
2015/02/27 职场文书
2015年度合同管理工作总结
2015/05/22 职场文书
《童年的发现》教学反思
2016/02/18 职场文书
如何使用pdb进行Python调试
2021/06/30 Python
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS