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通过DOM和SAX方式解析XML的应用实例分享
Nov 16 Python
Python模块WSGI使用详解
Feb 02 Python
Python实现将数据框数据写入mongodb及mysql数据库的方法
Apr 02 Python
详解Python 定时框架 Apscheduler原理及安装过程
Jun 14 Python
由面试题加深对Django的认识理解
Jul 19 Python
python 模拟银行转账功能过程详解
Aug 06 Python
python psutil监控进程实例
Dec 17 Python
使用pyinstaller逆向.pyc文件
Dec 20 Python
在keras里实现自定义上采样层
Jun 28 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
Jul 02 Python
pytorch 计算Parameter和FLOP的操作
Mar 04 Python
Python 居然可以在 Excel 中画画你知道吗
Feb 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 和 XML: 使用expat函数(三)
2006/10/09 PHP
一个显示某段时间内每个月的方法 返回由这些月份组成的数组
2012/05/16 PHP
php检测文件编码的方法示例
2014/04/25 PHP
php常用字符串比较函数实例汇总
2014/11/24 PHP
php列出mysql表所有行和列的方法
2015/03/13 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
JavaScript多线程的实现方法
2007/05/08 Javascript
javascript中window.event事件用法详解
2012/12/11 Javascript
nodejs 实现模拟form表单上传文件
2014/07/14 NodeJs
Javascript学习笔记之函数篇(五) : 构造函数
2014/11/23 Javascript
javascript中clipboardData对象用法详解
2015/05/13 Javascript
在JavaScript中处理时间之setMinutes()方法的使用
2015/06/11 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
通过bootstrap全面学习less
2016/11/09 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
Python中的字符串类型基本知识学习教程
2016/02/04 Python
python简单读取大文件的方法
2016/07/01 Python
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
通过cmd进入python的步骤
2020/06/16 Python
Python 如何反方向迭代一个序列
2020/07/28 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
2021/01/27 Python
HTML5 video标签(播放器)学习笔记(二):播放控制
2015/04/24 HTML / CSS
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
巴西Bo.Bô官方在线商店:经营奢侈品时尚业务
2020/03/16 全球购物
计算机应用毕业生自荐信
2013/10/23 职场文书
双十佳事迹材料
2014/01/29 职场文书
安全横幅标语
2014/06/09 职场文书
2016习总书记系列重要讲话心得体会
2016/01/15 职场文书
Python获取百度热搜的完整代码
2021/04/07 Python
mysql使用 not int 子查询隐含陷阱
2022/04/12 MySQL
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS