河北手机网站制作企业wordpress修改站点logo大小
2026/4/17 20:42:09 网站建设 项目流程
河北手机网站制作企业,wordpress修改站点logo大小,个人信息网站建设的心得体会,保利建设开发总公司网站Python 中的命令模式#xff08;Command Pattern#xff09; 命令模式是一种行为型设计模式#xff0c;其核心目的是#xff1a; 将一个请求#xff08;操作#xff09;封装为一个对象#xff0c;从而让你可以参数化客户端的不同请求、将请求排队或记录请求日志#x…Python 中的命令模式Command Pattern命令模式是一种行为型设计模式其核心目的是将一个请求操作封装为一个对象从而让你可以参数化客户端的不同请求、将请求排队或记录请求日志还支持可撤销的操作。形象比喻就像餐厅点餐——顾客调用者向服务员调用者下订单命令对象服务员把订单交给厨师接收者执行。订单可以被保存、排队、甚至取消。命令模式的优点解耦调用者和接收者调用者不需要知道谁来执行命令支持撤销/重做Undo/Redo最经典的应用支持命令队列、延迟执行、日志记录易于扩展新命令符合开闭原则可以组合命令宏命令典型应用场景GUI 按钮、菜单操作点击执行命令撤销/重做功能文本编辑器、绘图软件事务系统数据库操作回滚任务队列、线程池宏录制一系列命令组合执行远程控制、日志记录Python 实现示例带撤销功能的文本编辑器fromabcimportABC,abstractmethodfromtypingimportList# 接收者Receiver真正执行操作的对象classTextEditor:def__init__(self,text:str):self.texttextdefinsert(self,position:int,content:str):self.textself.text[:position]contentself.text[position:]print(f插入文本: {content} → 当前文本: {self.text})defdelete(self,start:int,end:int):deletedself.text[start:end]self.textself.text[:start]self.text[end:]print(f删除文本: {deleted} → 当前文本: {self.text})returndeleted# 返回被删除的内容用于撤销def__str__(self):returnself.text# 命令接口CommandclassCommand(ABC):abstractmethoddefexecute(self):passabstractmethoddefundo(self):pass# 具体命令插入命令classInsertCommand(Command):def__init__(self,editor:TextEditor,position:int,content:str):self.editoreditor self.positionposition self.contentcontentdefexecute(self):self.editor.insert(self.position,self.content)defundo(self):# 撤销插入就是删除刚插入的内容self.editor.delete(self.position,self.positionlen(self.content))# 具体命令删除命令classDeleteCommand(Command):def__init__(self,editor:TextEditor,start:int,end:int):self.editoreditor self.startstart self.endend self.deleted_contentNone# 执行时保存被删内容defexecute(self):self.deleted_contentself.editor.delete(self.start,self.end)defundo(self):ifself.deleted_contentisnotNone:self.editor.insert(self.start,self.deleted_content)# 调用者Invoker管理命令历史支持撤销classCommandManager:def__init__(self):self.history:List[Command][]self.redo_stack:List[Command][]defexecute_command(self,command:Command):command.execute()self.history.append(command)self.redo_stack.clear()# 新命令后清空重做栈defundo(self):ifnotself.history:print(没有可撤销的操作)returncommandself.history.pop()command.undo()self.redo_stack.append(command)print(撤销成功)defredo(self):ifnotself.redo_stack:print(没有可重做的操作)returncommandself.redo_stack.pop()command.execute()self.history.append(command)print(重做成功)# 客户端使用if__name____main__:editorTextEditor(Hello World)managerCommandManager()print(f初始文本: {editor}\n)# 执行插入insert_cmdInsertCommand(editor,5,, Python)manager.execute_command(insert_cmd)# 输出: Hello, Python World# 执行删除delete_cmdDeleteCommand(editor,5,13)# 删除 , Pythonmanager.execute_command(delete_cmd)# 输出: Hello Worldprint(\n--- 开始撤销 ---)manager.undo()# 撤销删除 → 恢复 , Pythonmanager.undo()# 撤销插入 → 回到 Hello Worldprint(\n--- 开始重做 ---)manager.redo()# 重做插入manager.redo()# 重做删除输出示例初始文本: Hello World 插入文本: , Python → 当前文本: Hello, Python World 删除文本: , Python → 当前文本: Hello World --- 开始撤销 --- 撤销成功 # 恢复到 Hello, Python World 撤销成功 # 恢复到 Hello World --- 开始重做 --- 重做成功 # 插入 → Hello, Python World 重做成功 # 删除 → Hello WorldPythonic 简化版函数作为命令当命令简单时可以用 callable函数/闭包代替类classSimpleCommandManager:def__init__(self):self.history[]self.redo_stack[]defexecute(self,do_func,undo_func):do_func()self.history.append((do_func,undo_func))self.redo_stack.clear()defundo(self):ifself.history:do_func,undo_funcself.history.pop()undo_func()self.redo_stack.append((do_func,undo_func))defredo(self):ifself.redo_stack:do_func,undo_funcself.redo_stack.pop()do_func()self.history.append((do_func,undo_func))# 使用textHellomanagerSimpleCommandManager()definsert():nonlocaltext text Worldprint(→,text)defremove():nonlocaltext texttext[:-6]print(←,text)manager.execute(insert,remove)manager.execute(lambda:print(额外操作),lambda:None)manager.undo()manager.undo()manager.redo()命令模式结构总结角色说明Command抽象命令接口execute/undoConcreteCommand具体命令InsertCommand、DeleteCommandReceiver接收者TextEditorInvoker调用者CommandManagerClient创建命令并设置到调用者命令模式 vs 其他模式对比模式目的是否支持撤销典型场景命令封装请求支持撤销/队列是编辑器、事务、宏策略算法可替换否支付、排序观察者状态变化广播通知否事件监听责任链请求沿链传递否处理流程Python 中的实用建议简单命令用 lambda 或函数闭包最 Pythonic复杂命令用类实现支持状态保存宏命令创建一个 CompositeCommand内部持有多个子命令常与观察者模式结合命令执行后通知 UI 更新classMacroCommand(Command):def__init__(self,commands:List[Command]):self.commandscommandsdefexecute(self):forcmdinself.commands:cmd.execute()defundo(self):forcmdinreversed(self.commands):cmd.undo()命令模式是实现可撤销操作和操作历史的基石在编辑器、游戏存档、事务系统中广泛应用。如果你想看更多实战例子如 GUI 按钮命令、线程池任务队列、宏录制、结合队列的延迟执行或者如何与备忘录模式结合实现多级撤销欢迎继续问

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询