zoukankan      html  css  js  c++  java
  • 大话设计模式Python实现-命令模式

    命令模式(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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    c++模板类的使用,编译的问题
    js中对象深度拷贝的方法(浅拷贝)
    java8 Function 函数式接口的妙用
    Redis Web Ui管理工具
    前端省市联动,与django传递信息
    做人做事,行为规范
    几斤猫尿,醉享生活
    分布式系统之平台三大支柱
    祭奠十年,我今起步
    一步一步,从一而终
  • 原文地址:https://www.cnblogs.com/onepiece-andy/p/python-command-pattern.html
Copyright © 2011-2022 走看看