使用命令模式模拟邮局送信
时间: 2024-02-21 17:35:07 浏览: 97
好的,以下是使用命令模式模拟邮局送信的示例代码:
```python
# Command interface
class Command:
def execute(self):
pass
# Receiver
class PostOffice:
def send_letter(self, recipient, message):
print(f"Sending letter to {recipient}: {message}")
# Concrete Command
class SendLetterCommand(Command):
def __init__(self, post_office, recipient, message):
self.post_office = post_office
self.recipient = recipient
self.message = message
def execute(self):
self.post_office.send_letter(self.recipient, self.message)
# Invoker
class Postman:
def __init__(self):
self.commands = []
def add_command(self, command):
self.commands.append(command)
def deliver_letters(self):
for command in self.commands:
command.execute()
def clear_commands(self):
self.commands = []
# Client
if __name__ == "__main__":
post_office = PostOffice()
postman = Postman()
postman.add_command(SendLetterCommand(post_office, "Alice", "Hello, Alice!"))
postman.add_command(SendLetterCommand(post_office, "Bob", "Hi, Bob!"))
postman.add_command(SendLetterCommand(post_office, "Charlie", "Greetings, Charlie!"))
postman.deliver_letters()
postman.clear_commands()
```
在这个示例中,我们定义了一个命令接口 `Command`,一个接收者 `PostOffice`,一个具体命令 `SendLetterCommand`,一个调用者 `Postman`,以及一个客户端模拟邮局送信的流程。
当客户端需要发送信件时,它创建一个具体命令对象,并将其添加到调用者的命令列表中。调用者可以执行 `deliver_letters` 方法来依次执行所有命令。在这个例子中,具体命令的 `execute` 方法实际上是调用了接收者的 `send_letter` 方法来发送信件。
使用命令模式可以将请求的发送者和接收者解耦,并且可以方便地添加、删除和修改命令。在这个例子中,我们可以轻松地添加新的具体命令,例如发送电子邮件命令、发送短信命令等等。
阅读全文