...

Python设计模式-16-命令模式

命令模式是一种行为型设计模式,它将请求封装成对象,从而允许我们将请求的发送者和接收者之间的耦合关系解耦。命令模式通常包括以下几个角色:

  • 命令(Command):定义了一个接口,用于封装具体命令的实现。

  • 具体命令(Concrete Command):实现了命令定义的接口,并具体地实现了命令的逻辑。

  • 接收者(Receiver):定义了命令的接收者,并实现了命令的具体逻辑。

  • 发送者(Invoker):调用命令对象来执行请求。

  • 客户端(Client):创建一个命令对象,并将其发送给发送者。

下面是一个简单的 Python 示例,演示了如何使用命令模式:

class Command:
    def execute(self):
        pass

class ConcreteCommandA(Command):
    def __init__(self, receiver):
        self.receiver = receiver

    def execute(self):
        self.receiver.do_something('A')

class ConcreteCommandB(Command):
    def __init__(self, receiver):
        self.receiver = receiver

    def execute(self):
        self.receiver.do_something('B')

class Receiver:
    def do_something(self, arg):
        print(f'Receiver: Doing something with "{arg}".')

class Invoker:
    def __init__(self):
        self.commands = []

    def add_command(self, command):
        self.commands.append(command)

    def execute_commands(self):
        for command in self.commands:
            command.execute()

receiver = Receiver()
command_a = ConcreteCommandA(receiver)
command_b = ConcreteCommandB(receiver)

invoker = Invoker()
invoker.add_command(command_a)
invoker.add_command(command_b)

invoker.execute_commands()

在上面的示例中,我们定义了一个命令 Command,它定义了一个接口 execute(),用于封装具体命令的实现。然后,我们定义了两个具体命令 ConcreteCommandAConcreteCommandB,它们实现了命令定义的接口,并具体地实现了命令的逻辑。接下来,我们定义了一个接收者 Receiver,它定义了命令的接收者,并实现了命令的具体逻辑。然后,我们定义了一个发送者 Invoker,它调用命令对象来执行请求。最后,我们创建了一个客户端,创建了两个命令对象,并将它们发送给发送者。

在使用命令模式时,我们可以通过将请求封装成对象来实现请求的发送者和接收者之间的解耦。在上面的示例中,我们创建了两个具体命令 ConcreteCommandAConcreteCommandB,并将它们发送给发送者 Invoker。当客户端调用 execute_commands() 方法时,发送者会依次调用每个命令对象的execute()方法,从而执行具体的命令逻辑。需要注意的是,命令模式可以帮助我们将请求的发送者和接收者之间的耦合关系解耦,从而提高代码的可维护性和可扩展性。

posted @ 2023-06-16 18:39  韩志超  阅读(151)  评论(0编辑  收藏  举报