zoukankan      html  css  js  c++  java
  • Python 设计模式—命令模式

    今日分享主题:Python 设计模式之命令模式。

    定义


    命令模式是一种行为设计模式,用于封装触发事件(完成任何一个操作)所包含的所有信息。一般有方法名称,拥有方法对象,方法参数等。

    命令模式就是对命令的封装。所谓封装命令,就是将一系列操作封装到命令类中,并且命令类只需要对外公开一个执行方法 execute,调用此命令的对象只需要执行命令的 execute 方法就可以完成所有的操作。这样调用此命令的对象就和命令具体操作之间解耦了。

    通过命令模式我们可以抽象出调用者,接收者和命令三个对象。调用者就是简单的调用命令,然后将命令发送给接收者,而接收者则接收并执行命令,执行命令的方式也是简单的调用命令的 execute 方法就可以了。发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。

    结构组成

    Command: 定义命令的接口类,声明要执行的抽象方法,可以理解为一个基类。

    ConcreteCommand_*: 命令接口实现对象,通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。

    Invoker: 要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象,相当于使用命令对象的入口。

    Proxy: 代理的调用者

    Python 代码实现

     1from abc import abstractmethod,ABC
     2class Command(ABC):
     3    """声明抽象类,定义抽象方法"""
     4    @abstractmethod
     5    def execute(self):
     6        pass
     7
     8class ConcreteCommand_start(Command):
     9    """实现抽象类的抽象方法"""
    10    def __init__(self,obj1):
    11        self.obj1=obj1
    12
    13    def execute(self):
    14        self.obj1.start()
    15
    16
    17class ConcreteCommand_show(Command):
    18    """实现抽象类的抽象方法"""
    19    def __init__(self,obj2):
    20        self.obj2=obj2
    21
    22    def execute(self):
    23        self.obj2.show()
    24
    25class Invoker:
    26    """接受命令并执行命令的类"""
    27    def start(self):
    28        print("command is starting...")
    29
    30    def show(self):
    31        print("command is showing...")
    32
    33class Proxy:
    34    """定义一个代理类"""
    35    def __init__(self):
    36       self.__queue=[]
    37
    38    #命令执行方法
    39    def execute_cmd(self,cmd):
    40       self.__queue.append(cmd)
    41       cmd.execute()
    42
    43if __name__ == '__main__':
    44    #实例化可执行命令的类对象
    45    test=Invoker()
    46    cmd1=ConcreteCommand_start(test)
    47    cmd2=ConcreteCommand_show(test)
    48    #实例化代理者类对象
    49    proxy=Proxy()
    50    proxy.execute_cmd(cmd1)
    51    proxy.execute_cmd(cmd2)

    输出结果为:

    1command is starting...
    2command is showing...

    总结


    命令行模式的优势如下:

    1、命令模式的封装性很好,每个命令都被封装起来,对于客户端来说,需要什么功能就去调用相应的命令,而无需知道命令具体是怎么执行的。

    2、命令模式的扩展性很好,在命令模式中,在接收者类中一般会对操作进行最基本的封装,命令类则通过对这些基本的操作进行二次封装。

    3、当增加新命令的时候,对命令类的编写一般不是从零开始的,有大量的接收者类可供调用,也有大量的命令类可供调用,代码的复用性很好。

    欢迎关注【无量测试之道】公众号,回复【领取资源】
    Python编程学习资源干货、
    Python+Appium框架APP的UI自动化、
    Python+Selenium框架Web的UI自动化、
    Python+Unittest框架API自动化、

    资源和代码 免费送啦~
    文章下方有公众号二维码,可直接微信扫一扫关注即可。

    备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

     

     添加关注,让我们一起共同成长!

  • 相关阅读:
    .ascx
    *.ascx *.asax *.aspx.resx *.asax.resx是什么文件
    DNN Learning How to install 1
    LG7881 [Ynoi2006] rmpq【分块,分治】
    LG6783 [Ynoi2008] rrusq【扫描线,KDT】
    UOJ681【UR #22】月球列车【二进制,Trie】
    AGC056E Cheese【概率期望,dp】
    AGC055F Creative Splitting【双射转化,dp】
    CTT2022 游记
    NOIP2021 退役记
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/14791022.html
Copyright © 2011-2022 走看看