今日分享主题:Python 设计模式之命令模式。
定义 命令模式是一种行为设计模式,用于封装触发事件(完成任何一个操作)所包含的所有信息。一般有方法名称,拥有方法对象,方法参数等。
命令模式就是对命令的封装。所谓封装命令,就是将一系列操作封装到命令类中,并且命令类只需要对外公开一个执行方法 execute,调用此命令的对象只需要执行命令的 execute 方法就可以完成所有的操作。这样调用此命令的对象就和命令具体操作之间解耦了。
通过命令模式我们可以抽象出调用者,接收者和命令三个对象。调用者就是简单的调用命令,然后将命令发送给接收者,而接收者则接收并执行命令,执行命令的方式也是简单的调用命令的 execute 方法就可以了。发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。
结构组成
Python 代码实现
from abc import abstractmethod,ABC
class Command(ABC):
"""声明抽象类,定义抽象方法"""
@abstractmethod
def execute(self):
pass
class ConcreteCommand_start(Command):
"""实现抽象类的抽象方法"""
def __init__(self,obj1):
self.obj1=obj1
def execute(self):
self.obj1.start()
class ConcreteCommand_show(Command):
"""实现抽象类的抽象方法"""
def __init__(self,obj2):
self.obj2=obj2
def execute(self):
self.obj2.show()
class Invoker:
"""接受命令并执行命令的类"""
def start(self):
print("command is starting...")
def show(self):
print("command is showing...")
class Proxy:
"""定义一个代理类"""
def __init__(self):
self.__queue=[]
#命令执行方法
def execute_cmd(self,cmd):
self.__queue.append(cmd)
cmd.execute()
if __name__ == '__main__':
#实例化可执行命令的类对象
test=Invoker()
cmd1=ConcreteCommand_start(test)
cmd2=ConcreteCommand_show(test)
#实例化代理者类对象
proxy=Proxy()
proxy.execute_cmd(cmd1)
proxy.execute_cmd(cmd2)
输出结果为:
command is starting...
command is showing...
总结 命令行模式的优势如下:
end