本文实例讲述了Python设计模式之命令模式。分享给大家供大家参考,具体如下:
命令模式介绍:
在面向对象编程中,命令模式是概括所有方法信息的设计模式。
此模式对象包涵方法名,及其相关参数值。
命令模式是一个分类的观察者设计模式,在命令模式下,对象被概括为一个命令表单,此表单包涵了所有用户需要的方法。
举个例子:如果有个按钮是用户接口“red”,当被触碰的时候,会启动后台的“turn red”接口。现在用户并不知道,通过什么类或者方法的接口能够让后台处理“turn red”操作,但是这个命令被发送了(触碰“red”按钮),会使得后台处理“turn red”操作。因此,命令模式给用户一个接口,而不用让用户了解哪些是实际执行的程序,也不会影响到用户程序。
实现命令模式的关键就是让调用者不要包涵底层实际命令执行代码,相同的调用者应该采用相同的接口。
命令模式是由三个组件构成,客户,调用者,接受者。
客户:一个实例化的对象
调用者:决定哪个方法被调用
接受者:实际命令的执行者
Example:
实现一个开关
切换ON/OFF
用开关ON/OFF去硬编码一个事件
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
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程序设计有所帮助。
原文链接:http://www.cnblogs.com/lizhitai/p/4451590.html