编程烤肉串模式(Command Pattern)是一种行为设计模式,它将一个请求或操作封装到一个命令对象中,从而使系统可以使用不同的请求将客户端参数化,对请求排队或记录请求日志,提供命令的撤销和恢复能力。以下是一个简单的示例,展示了如何使用命令模式来模拟烤肉串的过程。
示例代码
```python
from abc import ABCMeta, abstractmethod
抽象命令类
class Command(metaclass=ABCMeta):
def __init__(self, receiver):
self.receiver = receiver
@abstractmethod
def execute_command(self):
pass
具体命令类:烤羊肉串
class BakeMuttonCommand(Command):
def execute_command(self):
self.receiver.bake_mutton()
具体命令类:烤鸡翅
class BakeChickenWingCommand(Command):
def execute_command(self):
self.receiver.bake_chicken_wing()
接收者类:烤串师傅
class Barbecuer:
def bake_mutton(self):
print("烤羊肉串")
def bake_chicken_wing(self):
print("烤鸡翅")
客户端代码
def main():
boy = Barbecuer()
创建命令对象
bake_mutton_command = BakeMuttonCommand(boy)
bake_chicken_wing_command = BakeChickenWingCommand(boy)
执行命令
bake_mutton_command.execute_command()
bake_mutton_command.execute_command()
bake_mutton_command.execute_command()
bake_chicken_wing_command.execute_command()
bake_mutton_command.execute_command()
if __name__ == "__main__":
main()
```
代码解释
抽象命令类 `Command` :定义了一个抽象方法 `execute_command`,所有具体命令类都需要实现这个方法。
包含一个 `receiver` 属性,用于接收命令并执行操作。
具体命令类 `BakeMuttonCommand` 和 `BakeChickenWingCommand`
:
分别实现了 `execute_command` 方法,调用接收者的相应方法来执行烤羊肉串和烤鸡翅的操作。
接收者类 `Barbecuer`:
包含 `bake_mutton` 和 `bake_chicken_wing` 方法,用于实际执行烤羊肉串和烤鸡翅的操作。
客户端代码 `main`:
创建 `Barbecuer` 实例。
创建具体命令对象 `BakeMuttonCommand` 和 `BakeChickenWingCommand`,并将 `Barbecuer` 实例作为接收者传递给命令对象。
调用命令对象的 `execute_command` 方法来执行相应的操作。
优点
解耦:
客户端与接收者解耦,客户端只需要知道命令对象,而不需要知道接收者的具体实现。
可扩展性:
新增命令时,只需创建新的具体命令类,并实现 `execute_command` 方法。
支持撤销和恢复:
可以通过记录命令对象的状态来实现撤销和恢复功能。
命令队列:
可以方便地将命令对象加入队列,实现请求的排队处理。
通过这种方式,命令模式可以使代码更加灵活、可扩展和易于维护。