使用Python实现命令模式
命令模式是一种行为设计模式,其目的是将请求封装为对象,以便根据不同的请求进行参数化。通过将请求封装成一个对象,即可让用户使用不同的请求来参数化其他对象(例如日志记录、事务处理或队列等),并且支持可撤消的操作。
下面是一个使用Python实现命令模式的完整样例代码:
python
# 命令接口
class Command:
def execute(self):
pass
# 命令实现类
class LightOnCommand(Command):
def __init__(self, light):
self.light = light
def execute(self):
self.light.on()
class LightOffCommand(Command):
def __init__(self, light):
self.light = light
def execute(self):
self.light.off()
# 命令的接收者
class Light:
def on(self):
print("灯打开了")
def off(self):
print("灯关闭了")
# 命令调用者
class RemoteControl:
def __init__(self):
self.command = None
def set_command(self, command):
self.command = command
def press_button(self):
self.command.execute()
# 测试代码
def main():
light = Light()
light_on_command = LightOnCommand(light)
light_off_command = LightOffCommand(light)
remote_control = RemoteControl()
remote_control.set_command(light_on_command)
remote_control.press_button() # 打开灯
remote_control.set_command(light_off_command)
remote_control.press_button() # 关闭灯
if __name__ == "__main__":
main()
在上述示例中, `Command` 接口定义了 `execute` 方法。具体的命令类 `LightOnCommand` 和 `LightOffCommand` 实现了 `Command` 接口,并将请求封装为对象。
`Light` 类作为命令的接收者,在 `LightOnCommand` 和 `LightOffCommand` 的 `execute` 方法中具体执行对应的操作。
`RemoteControl` 类作为命令调用者,通过 `set_command` 方法设置具体的命令,并使用 `press_button` 方法来执行命令。
通过这种方式,用户可以根据需要创建不同的命令实现类,并通过调用 `RemoteControl` 的方法来执行对应的命令。这样实现了请求的封装、参数化和可撤消操作的目标。