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查询mysql中文乱码问题
Nov 09 Python
初步解析Python中的yield函数的用法
Apr 03 Python
Python随机生成数模块random使用实例
Apr 13 Python
Python中的ceil()方法使用教程
May 14 Python
python使用opencv读取图片的实例
Aug 17 Python
python基础while循环及if判断的实例讲解
Aug 25 Python
pandas全表查询定位某个值所在行列的方法
Apr 12 Python
python的faker库用法
Nov 28 Python
python实现提取COCO,VOC数据集中特定的类
Mar 10 Python
Python tkinter实现简单加法计算器代码实例
May 13 Python
Python生成随机验证码代码实例解析
Jun 09 Python
Python数据处理的三个实用技巧分享
Apr 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中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
PHP的几个常用加密函数
2016/02/03 PHP
php 输出缓冲 Output Control用法实例详解
2020/03/03 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
javascript中的原型链深入理解
2014/02/24 Javascript
Javascript WebSocket使用实例介绍(简明入门教程)
2014/04/16 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
jquery实现列表上下移动功能
2016/02/25 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
浅谈如何实现easyui的datebox格式化
2016/06/12 Javascript
BootStrap中Datepicker控件带中文的js文件
2016/08/10 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
JS继承与闭包及JS实现继承的三种方式
2017/10/15 Javascript
angular.js实现购物车功能
2017/10/23 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
微信小程序实现左滑修改、删除功能
2020/10/19 Javascript
Node.js+Vue脚手架环境搭建的方法步骤
2020/03/08 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
Python MD5加密实例详解
2017/08/02 Python
Python内置函数reversed()用法分析
2018/03/20 Python
浅谈css3中的前缀
2016/07/20 HTML / CSS
Feelunique德国官方网站:欧洲最大的在线美容零售商
2019/07/20 全球购物
面向对象概念面试题(.NET)
2016/11/04 面试题
假日旅行社实习自我鉴定
2013/09/24 职场文书
打架检讨书400字
2014/01/17 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
党员干部批评与自我批评反四风思想汇报
2014/09/21 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
公司董事任命书
2015/09/21 职场文书
导游词之无锡梅园
2019/11/28 职场文书
python process模块的使用简介
2021/05/14 Python
CSS3中Animation实现简单的手指点击动画的示例
2021/07/15 HTML / CSS