命令模式介绍:

在面向对象编程中,命令模式是概括所有方法信息的设计模式。

此模式对象包涵方法名,及其相关参数值。

命令模式是一个分类的观察者设计模式,在命令模式下,对象被概括为一个命令表单,此表单包涵了所有用户需要的方法。

举个例子:如果有个按钮是用户接口“red”,当被触碰的时候,会启动后台的“turn red”接口。现在用户并不知道,通过什么类或者方法的接口能够让后台处理“turn red”操作,但是这个命令被发送了(触碰“red”按 钮),会使得后台处理“turn red”操作。因此,命令模式给用户一个接口,而不用让用户了解哪些是实际执行的程序,也不会影响到用户程序。

实现命令模式的关键就是让调用者不要包涵底层实际命令执行代码,相同的调用者应该采用相同的接口。

命令模式是由三个组件构成,客户,调用者,接受者。

客户:一个实例化的对象

调用者:决定哪个方法被调用

接受者:实际命令的执行者

Example:

实现一个开关

切换ON/OFF

用开关ON/OFF去硬编码一个事件

代码如下:

1 classSwitch:2 '''The INVOKER class'''

3

4 def __init__(self, flipUpCmd, flipDownCmd):5 self.__flipUpCommand =flipUpCmd6 self.__flipDownCommand =flipDownCmd7

8 defflipUp(self):9 self.__flipUpCommand.execute()10

11 defflipDown(self):12 self.__flipDownCommand.execute()13

14 classLight:15 '''The RECEIVER Class'''

16 defturnOn(self):17 print "The light is on"

18

19 defturnOff(self):20 print "The light is off"

21

22 classCommand:23 """The Command Abstrace class"""

24 def __init__(self):25 pass

26 defexecute(self):27 pass

28

29 classFlipUpCommand(Command):30 '''The Command class for turning on the light'''

31

32 def __init__(self, light):33 self.__light =light34

35 defexecute(self):36 self.__light.turnOn()37

38 classFileDownCommand(Command):39 '''The Command class for turning off the light'''

40

41 def __init__(self, light):42 Command.__init__(self)43 self.__light =light44

45 defexecute(self):46 self.__light.turnOff()47

48 classLightSwitch:49 '''The Client Class'''

50 def __init__(self):51 self.__lamp =Light()52 self.__switchUp = FlipUpCommand(self.__lamp)53 self.__switchDown = FileDownCommand(self.__lamp)54 self.__switch = Switch(self.__switchUp, self.__switchDown)55

56 defswitch(self, cmd):57 cmd =cmd.strip().upper()58 try:59 if cmd == "ON":60 self.__switch.flipUp()61 elif cmd == "OFF":62 self.__switch.flipDown()63 else:64 print "Argument \"ON\" or \"OFF\" is required"

65 exceptException,msg:66 print "Exception occured:%s" %msg67

68

69 #Execute if the file is run as a script and not imported as a module

70

71 if __name__ == "__main__":72 lightSwitch =LightSwitch()73

74 print "Switch ON test"

75 lightSwitch.switch("ON")76

77 print "Switch OFF test"

78 lightSwitch.switch("OFF")79

80 print "Invalid Command test"

81 lightSwitch.switch("****")

View Code

总结:面向对象的方法,就是这么牛叉啊,代码看得让人头晕,层层的封装。警惕面向对象编程的过度对象化。

python 命令模式_python 设计模式之命令模式相关推荐

  1. python实现解释器_Python设计模式之解释器模式

    解释器模式 对每个应用来说,至少有以下两种不同的用户分类. 基本用户:这类用户只希望能够凭直觉使用应用.他们不喜欢花太多时间配置或学习应用的内部.对他们来说,基本的用法就足够了. 高级用户:这些用户, ...

  2. python的out模式_Python设计模式之状态模式

    状态模式 面向对象编程着力于在对象交互时改变它们的状态.在很多问题中,有限状态机(通常名为状态机)是一个非常方便的状态转换建模(并在必要时以数学方式形式化)工具.首先,什么是状态机?状态机是一个抽象机 ...

  3. python中command是什么意思_python 设计模式之命令(Command)模式

    #写在前面 也了解了不少设计模式了,他们都有一个通病,那就是喜欢把简单的东西复杂化.比如在不同的类中加个第三者.哈哈哈,简单变复杂是有目的的,那就是降低耦合度,增强可维护性,提高代码复用性,使代码变得 ...

  4. java.awt.action 命令模式_java设计模式之命令模式

    学校中.生活中.社会中总是会存在一定的阶层,虽然我们很多人都不可认可阶层的存在.命令这一词也就在阶层中诞生.家长命令孩子,老师命令学生,领导命令小娄娄.这些都在我们的生活存在的东西,相信这一个模式学习 ...

  5. python文件合法模式组合_python设计模式之组合模式

    最开始接触组合设计模式是在大话设计模式这本书中的案例,讲的是让你设计一个公司的组织架构,一个总公司下有人力资源部门,IT部门, 财务部门,还有广州分公司.深圳分公司,在分公司下也有IT部门和财务部门, ...

  6. python中代理模式分为几种_Python设计模式之代理模式实例详解

    本文实例讲述了Python设计模式之代理模式.分享给大家供大家参考,具体如下: 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 #!/usr/bin/env py ...

  7. python设计模式名片_Python设计模式之门面模式简单示例

    本文实例讲述了python设计模式之门面模式.分享给大家供大家参考,具体如下: facade:建筑物的表面 门面模式是一个软件工程设计模式,主要用于面向对象编程. 一个门面可以看作是为大段代码提供简单 ...

  8. linux编译python语言指令_Python实现Linux命令xxd -i功能

    一. Linux xxd -i功能 Linux系统xxd命令使用二进制或十六进制格式显示文件内容.若未指定outfile参数,则将结果显示在终端屏幕上:否则输出到outfile中.详细的用法可参考li ...

  9. python工厂模式 django_python设计模式-工厂方法模式

    题目:假设你有一个 pizza 店,功能包括下订单.做 pizza,你的代码会如何写呢? def order_pizza(): pizza = Pizza() pizza.prepare() pizz ...

最新文章

  1. 分享预告:「数据安全问题」+「 股权与期权」
  2. 机器学习模型解释性工具SHAP
  3. 实验吧逆向catalyst-system——WP
  4. python爬虫导入数据库_python爬虫爬下来的数据怎么导入到MySQL
  5. jq获取当前完整html,jquery怎样获取html的内容?
  6. Android 系统(250)---main log导入到uart口
  7. 【java】LongAdder源码分析原理分析
  8. 干货 | 深度文本分类综述(12篇经典论文)
  9. android程序连接网络出现android.os.NetworkOnMainThreadEx
  10. python学习-- Django根据现有数据库,自动生成models模型文件
  11. Win7 Windows照片查看器无法显示此图片,因为计算机上的可用内存可能不足
  12. java中的source_Linux中source命令的用法
  13. 富途牛牛A股数据API使用基础教程
  14. 网上作业批改系统的设计与实现(JSP,MySQL)
  15. 分词器以及ik中文分词器
  16. Duplicate Removal
  17. 【python数据分析实战】城市餐饮店铺选址问题(2)—— 确定餐馆的具体位置
  18. android 图片热点区域,Android开发之扫描附近wifi热点并列表显示
  19. 新手程序员首份工作月薪三千,网友:3000元?你是在丢码农的脸吗
  20. 黑马在线教育数仓实战1

热门文章

  1. 关于项目IIS CPU100%故障临时解决方案
  2. Spark-on-YARN
  3. function declaration isn't a prototype解决办法
  4. 年薪201万!华中科大AI博士生入选华为天才少年计划!
  5. 源码包安装mysql_源码包安装MySQL
  6. python动态心形代码_Python实现酷炫的动态交互式数据可视化,附代码!
  7. 如何安装python3.7.2_Python3.7与Python2.7在centos7下兼容并存
  8. python入门——条件控制+循环语句
  9. 文件下的所有文本内容转为一个csv文件代码
  10. 写作就像升级打怪,4个实战技巧让你“写什么都很棒”!