python 命令模式_python 设计模式之命令模式
命令模式介绍:
在面向对象编程中,命令模式是概括所有方法信息的设计模式。
此模式对象包涵方法名,及其相关参数值。
命令模式是一个分类的观察者设计模式,在命令模式下,对象被概括为一个命令表单,此表单包涵了所有用户需要的方法。
举个例子:如果有个按钮是用户接口“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 设计模式之命令模式相关推荐
- python实现解释器_Python设计模式之解释器模式
解释器模式 对每个应用来说,至少有以下两种不同的用户分类. 基本用户:这类用户只希望能够凭直觉使用应用.他们不喜欢花太多时间配置或学习应用的内部.对他们来说,基本的用法就足够了. 高级用户:这些用户, ...
- python的out模式_Python设计模式之状态模式
状态模式 面向对象编程着力于在对象交互时改变它们的状态.在很多问题中,有限状态机(通常名为状态机)是一个非常方便的状态转换建模(并在必要时以数学方式形式化)工具.首先,什么是状态机?状态机是一个抽象机 ...
- python中command是什么意思_python 设计模式之命令(Command)模式
#写在前面 也了解了不少设计模式了,他们都有一个通病,那就是喜欢把简单的东西复杂化.比如在不同的类中加个第三者.哈哈哈,简单变复杂是有目的的,那就是降低耦合度,增强可维护性,提高代码复用性,使代码变得 ...
- java.awt.action 命令模式_java设计模式之命令模式
学校中.生活中.社会中总是会存在一定的阶层,虽然我们很多人都不可认可阶层的存在.命令这一词也就在阶层中诞生.家长命令孩子,老师命令学生,领导命令小娄娄.这些都在我们的生活存在的东西,相信这一个模式学习 ...
- python文件合法模式组合_python设计模式之组合模式
最开始接触组合设计模式是在大话设计模式这本书中的案例,讲的是让你设计一个公司的组织架构,一个总公司下有人力资源部门,IT部门, 财务部门,还有广州分公司.深圳分公司,在分公司下也有IT部门和财务部门, ...
- python中代理模式分为几种_Python设计模式之代理模式实例详解
本文实例讲述了Python设计模式之代理模式.分享给大家供大家参考,具体如下: 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 #!/usr/bin/env py ...
- python设计模式名片_Python设计模式之门面模式简单示例
本文实例讲述了python设计模式之门面模式.分享给大家供大家参考,具体如下: facade:建筑物的表面 门面模式是一个软件工程设计模式,主要用于面向对象编程. 一个门面可以看作是为大段代码提供简单 ...
- linux编译python语言指令_Python实现Linux命令xxd -i功能
一. Linux xxd -i功能 Linux系统xxd命令使用二进制或十六进制格式显示文件内容.若未指定outfile参数,则将结果显示在终端屏幕上:否则输出到outfile中.详细的用法可参考li ...
- python工厂模式 django_python设计模式-工厂方法模式
题目:假设你有一个 pizza 店,功能包括下订单.做 pizza,你的代码会如何写呢? def order_pizza(): pizza = Pizza() pizza.prepare() pizz ...
最新文章
- 分享预告:「数据安全问题」+「 股权与期权」
- 机器学习模型解释性工具SHAP
- 实验吧逆向catalyst-system——WP
- python爬虫导入数据库_python爬虫爬下来的数据怎么导入到MySQL
- jq获取当前完整html,jquery怎样获取html的内容?
- Android 系统(250)---main log导入到uart口
- 【java】LongAdder源码分析原理分析
- 干货 | 深度文本分类综述(12篇经典论文)
- android程序连接网络出现android.os.NetworkOnMainThreadEx
- python学习-- Django根据现有数据库,自动生成models模型文件
- Win7 Windows照片查看器无法显示此图片,因为计算机上的可用内存可能不足
- java中的source_Linux中source命令的用法
- 富途牛牛A股数据API使用基础教程
- 网上作业批改系统的设计与实现(JSP,MySQL)
- 分词器以及ik中文分词器
- Duplicate Removal
- 【python数据分析实战】城市餐饮店铺选址问题(2)—— 确定餐馆的具体位置
- android 图片热点区域,Android开发之扫描附近wifi热点并列表显示
- 新手程序员首份工作月薪三千,网友:3000元?你是在丢码农的脸吗
- 黑马在线教育数仓实战1
热门文章
- 关于项目IIS CPU100%故障临时解决方案
- Spark-on-YARN
- function declaration isn't a prototype解决办法
- 年薪201万!华中科大AI博士生入选华为天才少年计划!
- 源码包安装mysql_源码包安装MySQL
- python动态心形代码_Python实现酷炫的动态交互式数据可视化,附代码!
- 如何安装python3.7.2_Python3.7与Python2.7在centos7下兼容并存
- python入门——条件控制+循环语句
- 文件下的所有文本内容转为一个csv文件代码
- 写作就像升级打怪,4个实战技巧让你“写什么都很棒”!