码迷,mamicode.com
首页 > 编程语言 > 详细

大话设计模式Python实现-命令模式

时间:2017-11-24 16:57:43      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:lan   sig   执行命令   on()   signature   receiver   logs   http   div   

 

命令模式(Command Pattern):将请求封装成对象,从而使可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作.

下面是一个命令模式的demo:

 1 #!/usr/bin/env python
 2 # -*- coding:utf-8 -*-
 3 
 4 __author__ = Andy
 5 """
 6 大话设计模式
 7 设计模式——命令模式
 8 命令模式(Command Pattern):将请求封装成对象,从而使可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤消的操作.
 9 """
10 
11 # 命令类
12 class Command(object):
13 
14     def __init__(self, receiver):
15         self.receiver = receiver
16 
17     def execute(self):
18         pass
19 
20 # 执行接收者的操作
21 class ConcreteCommand(Command):
22 
23     def execute(self):
24         self.receiver.action()
25 
26 
27 # 接收命令
28 class Invoker(object):
29 
30     def __init__(self):
31         self.command = ‘‘
32 
33     def setcommand(self,command):
34         self.command = command
35 
36     def excutecommand(self):
37         self.command.execute()
38 
39 
40 # 具体执行类
41 class Receiver(object):
42 
43     def action(self):
44         print "执行请求"
45 
46 if __name__ == "__main__":
47 
48     r = Receiver() #创建需要执行的命令
49     c = ConcreteCommand(r) # 绑定要执行的命令
50     i = Invoker() # 创建命令执行者
51     i.setcommand(c) # 接受命令
52     i.excutecommand() # 执行命令

上面类的设计如下图:

技术分享图片

优点:

可以较容易的设计一个命令队列

可以较容易的将命令记入日志

允许接收请求的一方决定是否要否决请求

可以容易的实现对请求的撤销和重做

加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易

命令模式最大的优点是 把请求一个操作的对象与知道怎么执行一个操作的对象分割开

 


作者:Andy
出处:http://www.cnblogs.com/onepiece-andy/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

 

大话设计模式Python实现-命令模式

标签:lan   sig   执行命令   on()   signature   receiver   logs   http   div   

原文地址:http://www.cnblogs.com/onepiece-andy/p/python-command-pattern.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!