设计模式之十三--命令模式

本文深入探讨了命令模式的设计理念,通过将请求封装为对象,实现了请求的参数化、日志记录、撤销与重做等功能。并通过一个具体的烧烤订单处理案例,展示了如何使用Python实现命令模式,包括命令接口定义、具体命令实现以及执行者与调用者的角色扮演。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销操作。

命令模式的优点:

  1. 能够容易设计一个命令队列
  2. 在需要情况下,可以较容易地将命令记入日志
  3. 允许接收请求的一方决定是否可以否决请求
  4. 可以轻易实现请求撤销和重做
  5. 符合开闭原则
from abc import ABCMeta, abstractmethod


class Command(metaclass=ABCMeta):
    def __init__(self, chief):
        self.chief = chief

    @abstractmethod
    def execute(self):
        pass


class BakeMuttonCommand(Command):

    def execute(self):
        self.chief.execute_bake_mutton()


class BakeChickenWingCommand(Command):

    def execute(self):
        self.chief.execute_bake_chicken_wing()


class Chief:

    def __init__(self, name):
        self.name = name

    def execute_bake_mutton(self):
        print("{0} cope with order bake_mutton".format(self.name))

    def execute_bake_chicken_wing(self):
        print("{0} cope with order bake_chicken_wing".format(self.name))


class Waiter:
    def __init__(self):
        self.order = []

    def set_order(self, command):
        self.order.append(command)

    def notify(self):
        for command in self.order:
            command.execute()


if __name__ == "__main__":
    chief = Chief("Li")
    waitress = Waiter()

    mutton_command = BakeMuttonCommand(chief)
    chicken_wing_command = BakeChickenWingCommand(chief)

    waitress.set_order(mutton_command)
    waitress.set_order(chicken_wing_command)

    waitress.notify()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值