返回

命令模式的由来和特点解析,轻松解耦请求发送与接收!

前端

命令模式的由来

命令模式的由来,其实是回调函数的一个面向对象的替代品。简单说就是根据面向对象的思路,通过回调函数来实现请求发送者和接收者之间的解耦,这种设计模式就叫命令模式。

命令模式的特点

  1. 数据互不干扰

    命令模式将请求发送者和请求接收者之间的数据解耦,使得它们之间不会相互影响。这使得程序更加健壮和易于维护。

  2. 撤销操作

    命令模式支持撤销操作,这使得用户可以轻松地纠正错误。

  3. 排队

    命令模式可以将请求排队,以便按顺序执行。这使得程序更加高效,因为可以避免多个请求同时执行导致的资源争用。

命令模式的应用场景

命令模式可以用于各种场景,其中最常见的包括:

  • 动画
  • 多线程任务队列
  • 撤销/重做功能
  • 日志记录

命令模式的示例

class Command:
    def execute(self):
        pass


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

    def execute(self):
        self.receiver.action()


class Receiver:
    def action(self):
        print("Receiver action")


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()


if __name__ == "__main__":
    receiver = Receiver()
    command = ConcreteCommand(receiver)
    invoker = Invoker()
    invoker.add_command(command)
    invoker.execute_commands()

在这个示例中,Command类是一个抽象类,它定义了execute()方法。ConcreteCommand类是一个具体命令类,它实现了Command类中的execute()方法。Receiver类是一个接收者类,它实现了action()方法。Invoker类是一个调用者类,它管理命令并调用命令的execute()方法。

在主函数中,我们创建了一个Receiver对象,一个ConcreteCommand对象和一个Invoker对象。然后,我们将ConcreteCommand对象添加到Invoker对象中。最后,我们调用Invoker对象的execute_commands()方法,该方法会依次调用所有命令的execute()方法。

结语

命令模式是一种非常强大的设计模式,它可以用于各种场景。通过使用命令模式,可以将请求发送者和请求接收者之间的数据解耦,使得程序更加健壮和易于维护。此外,命令模式还支持撤销操作和排队机制,这使得程序更加高效。