返回
命令模式的由来和特点解析,轻松解耦请求发送与接收!
前端
2023-09-04 04:13:26
命令模式的由来
命令模式的由来,其实是回调函数的一个面向对象的替代品。简单说就是根据面向对象的思路,通过回调函数来实现请求发送者和接收者之间的解耦,这种设计模式就叫命令模式。
命令模式的特点
-
数据互不干扰
命令模式将请求发送者和请求接收者之间的数据解耦,使得它们之间不会相互影响。这使得程序更加健壮和易于维护。
-
撤销操作
命令模式支持撤销操作,这使得用户可以轻松地纠正错误。
-
排队
命令模式可以将请求排队,以便按顺序执行。这使得程序更加高效,因为可以避免多个请求同时执行导致的资源争用。
命令模式的应用场景
命令模式可以用于各种场景,其中最常见的包括:
- 动画
- 多线程任务队列
- 撤销/重做功能
- 日志记录
命令模式的示例
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()
方法。
结语
命令模式是一种非常强大的设计模式,它可以用于各种场景。通过使用命令模式,可以将请求发送者和请求接收者之间的数据解耦,使得程序更加健壮和易于维护。此外,命令模式还支持撤销操作和排队机制,这使得程序更加高效。