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的dict,set,list,tuple应用详解
Jul 24 Python
python过滤字符串中不属于指定集合中字符的类实例
Jun 30 Python
Python自动化运维和部署项目工具Fabric使用实例
Sep 18 Python
Python中getpass模块无回显输入源码解析
Jan 11 Python
python数据处理 根据颜色对图片进行分类的方法
Dec 08 Python
python 读取鼠标点击坐标的实例
Dec 29 Python
python matplotlib库绘制散点图例题解析
Aug 10 Python
浅谈pytorch池化maxpool2D注意事项
Feb 18 Python
Python实现Wordcloud生成词云图的示例
Mar 30 Python
基于python生成英文版词云图代码实例
May 16 Python
Python DES加密实现原理及实例解析
Jul 17 Python
numpy array找出符合条件的数并赋值的示例代码
Jun 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
咖啡冲泡指南 咖啡有哪些制作方式 单品咖啡 意式咖啡
2021/03/06 冲泡冲煮
PHP获取当前页面URL函数实例
2014/10/22 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
PHP7 弃用功能
2021/03/09 PHP
javascript实现瀑布流自适应遇到的问题及解决方案
2015/01/28 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
node.js 动态执行脚本
2016/06/02 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
2016/12/30 Javascript
JavaScript正则获取地址栏中参数的方法
2017/03/02 Javascript
使用vue官方提供的模板vue-cli搭建一个helloWorld案例分析
2018/01/16 Javascript
JS中用EL表达式获取上下文参数值的方法
2018/03/28 Javascript
JS精确判断数据类型代码实例
2019/12/18 Javascript
vue2和vue3的v-if与v-for优先级对比学习
2020/10/10 Javascript
把大数据数字口语化(python与js)两种实现
2013/02/21 Python
python完成FizzBuzzWhizz问题(拉勾网面试题)示例
2014/05/05 Python
Python中用format函数格式化字符串的用法
2015/04/08 Python
python 截取 取出一部分的字符串方法
2017/03/01 Python
python处理xml文件的方法小结
2017/05/02 Python
Python实现调度算法代码详解
2017/12/01 Python
python机器人行走步数问题的解决
2018/01/29 Python
Python continue继续循环用法总结
2018/06/10 Python
pandas重新生成索引的方法
2018/11/06 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)
2020/02/05 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
Cpython解释器中的GIL全局解释器锁
2020/11/09 Python
python 实现端口扫描工具
2020/12/18 Python
猎人靴英国官网:Hunter Boots
2017/02/02 全球购物
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
Java面试题:为什么要用Java
2012/05/11 面试题
房地产项目策划书
2014/02/05 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
聘任证明怎么写
2015/03/02 职场文书
详解Redis实现限流的三种方式
2021/04/27 Redis