【python设计模式】15、命令模式

哲学思想:

命令模式的哲学思想是将请求封装成对象,从而使不同的请求可以被存储、传递、调用、撤销、重做等。这种封装使得命令的发起者与命令的执行者之间解耦,从而增加了系统的灵活性和可扩展性。

命令模式的本质是将命令请求封装成对象,从而使得命令请求可以像其他对象一样被处理。这种封装使得命令请求的发起者和执行者之间实现了松耦合,发起者无需知道请求的具体实现细节,只需要知道请求的接收者即可。

在命令模式中,每个命令都对应着一个命令对象,该对象封装了命令的具体实现逻辑,并且实现了执行、撤销等操作。命令对象可以被存储、传递、调用、撤销、重做等,从而增加了系统的灵活性和可扩展性。

总之,命令模式的哲学思想是将请求封装成对象,从而增加系统的灵活性和可扩展性,实现请求的发起者和执行者之间的松耦合。这种思想在设计中经常被应用,例如在GUI开发中、事务处理中、消息系统中等都有命令模式的应用。

简介:

命令模式是一种行为型设计模式,它的目的是将请求封装成对象,从而使请求的发起者和接收者之间解耦,使得不同的请求可以被存储、传递、调用、撤销、重做等。命令模式中包含了四个核心角色:命令、接收者、调用者和客户端。

命令对象封装了命令的具体实现逻辑,并且实现了执行、撤销等操作。接收者负责实际执行命令的操作。调用者负责将命令对象传递给接收者,并且可以存储命令对象、执行命令对象、撤销命令对象等。客户端负责创建命令对象并将其传递给调用者。

优点:

  1. 解耦请求的发起者和接收者,使得系统更加灵活可扩展;
  2. 可以将命令对象进行存储、传递、调用、撤销、重做等操作;
  3. 可以很容易地新增或修改命令,而无需修改已有的代码。

缺点:

  1. 由于引入了大量的命令对象,系统的复杂度会增加;
  2. 可能会导致某些系统操作需要支持撤销和重做,增加了系统的开销。

实际应用场景:

命令模式在实际应用中广泛存在,例如在GUI开发中、事务处理中、消息系统中等都有命令模式的应用。

代码实现:

class Command:
    def execute(self):
        pass

class SaveCommand(Command):
    def execute(self):
        # 实现保存操作的代码
        print("执行保存操作")

class DeleteCommand(Command):
    def execute(self):
        # 实现删除操作的代码
        print("执行删除操作")

class Invoker:
    def __init__(self):
        self.command = None

    def set_command(self, command):
        self.command = command

    def execute_command(self):
        if self.command is not None:
            self.command.execute()

if __name__ == "__main__":
    save_command = SaveCommand()
    delete_command = DeleteCommand()

    invoker = Invoker()
    invoker.set_command(save_command)
    invoker.execute_command()

    invoker.set_command(delete_command)
    invoker.execute_command()

以上代码实现了一个简单的命令模式,包含三个类:Command、SaveCommand、DeleteCommand和Invoker。其中Command为命令的抽象类,SaveCommand和DeleteCommand为具体的命令类,Invok为调用者类。

当需要执行一个命令时,调用者类会将命令类设置为当前的命令,然后调用命令的execute方法,实现命令的执行。在以上代码中,我们创建了一个SaveCommand实例和一个DeleteCommand实例,并通过Invoker类分别执行了保存和删除操作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值