Python设计模式:命令模式
设计模式十二:命令模式
什么是命令模式
将一个操作(撤销、重做、复制、粘贴等)封装成一个对象。
使用优势
不需要直接执行一个命令,命令可以按照希望执行。
调用命令的对象与知道如何执行命令的对象解耦。
调用者无需知道命令的任何实现细节。
可以把多个命令组织起来,调用者能够按顺序执行。
使用场景
如果一个操作需要多次被调用,并且需要在不同场景调用,那么就可以将其封装成一个对象
典型案例
餐馆点餐,每个账单都是独立的,但是每个账单都可以执行许多不同命令,
比如 点菜命令(可以点不同菜加入到烹煮队列里),撤销命令等
实例代码
import os
class RenameFile:def __init__(self,srcpath,destpath):self.src,self.dest = srcpath,destpathdef execute(self):os.rename(self.src,self.dest)def undo(self):os.rename(self.dest,self.src)class CreateFile:def __init__(self,path,txt='11111111111111\n'):self.path,self.txt = path,txtdef execute(self):with open(self.path,mode = 'w',encoding='utf-8') as f:f.write(self.txt)def undo(self):delete_file(self.path)class ReadFile:def __init__(self,path):self.path = pathdef execute(self):with open(self.path,mode = 'r' ,encoding='utf-8') as f:print(f.read(),end='')# 删除文件的命令可以是一个方法,不一定是要和其他命令一样
def delete_file(path):os.remove(path)def main():orig , new = 'file1','file2'command = []for cmd in CreateFile(orig),ReadFile(orig),RenameFile(orig,new):command.append(cmd)[c.execute() for c in command]answer = input('reverse the executed command?[y/n]')if answer not in 'yY':print('the result is {}',format(new))exit()# 执行撤销动作时,需要从后往前撤销,所以需要reversed方法来反转列表for c in reversed(commands):try:c.undo()except AttributeError as e:passif __name__ == "__main__":main()
Python设计模式:命令模式相关推荐
- Python设计模式-命令模式
Python设计模式-命令模式 代码基于3.5.2,代码如下; #coding:utf-8 #命令模式class barbecuer():def bakeButton(self):print(&quo ...
- Python设计模式-建造者模式
Python设计模式-建造者模式 代码基于3.5.2,代码如下; #coding:utf-8 #建造者模式 class Burger():name = ""price = 0.0d ...
- Python设计模式-状态模式
Python设计模式-状态模式 代码基于3.5.2,代码如下; #coding:utf-8 #状态模式class state():def writeProgram(self,work):raise N ...
- Python设计模式-备忘录模式
Python设计模式-备忘录模式 代码基于3.5.2,代码如下; #coding:utf-8 #备忘录模式 import randomclass gameCharacter():vitality = ...
- Python设计模式-解释器模式
Python设计模式-解释器模式 代码基于3.5.2,代码如下; #coding:utf-8 #解释器模式class PlayContext():play_text = Noneclass Expre ...
- Python设计模式-策略模式
Python设计模式-策略模式 代码基于3.5.2,代码如下; #coding:utf-8 #策略模式class sendInterface():def send(self,value):raise ...
- Python设计模式-外观模式
Python设计模式-外观模式 代码基于3.5.2,代码如下; #coding:utf-8 # 外观模式class AlarmSensor:def run(self):print("Alar ...
- Python设计模式-桥接模式
Python设计模式-桥接模式 基于Python3.5.2,代码如下 #coding:utf-8class Shape():name = ""param = "" ...
- Python设计模式-代理模式
Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...
- 设计模式 命令模式 实例_根据您的命令-命令设计模式
设计模式 命令模式 实例 命令设计模式是一种广为人知的设计模式,属于行为设计模式("四人帮"的一部分). 顾名思义,它与应用程序中的动作和事件有关. 问题陈述: 假设有一个网页将在 ...
最新文章
- char的初始值_java从入门到放弃 各种数组的初始值?
- orcad快捷键_lt;SCHgt; ORCAD 快捷键
- 框架:springboot组合spring、springmvc、mybatis的一个小demo
- 通过/proc/PID/status查看进程内存占用情况
- 浅析Linux awk命令
- 使用 RxJs Observable 来避免 Angular 应用中的 Promise 使用
- Qt QByteArray 转换 QString QT5.12.7
- import 别名_Python基础找茬系列09--import和from-import的引用区别
- 教你玩转CSS margin(外边距)
- jdk1.8对synchronized锁的优化
- 学习Python可以从事哪些工作?
- win7计算机里没有网络图标,Win7网络图标不见了?找回网络图标的方法
- 非越狱iPad实现外接键盘全APP五笔输入(IOS14已自带五笔)
- 设计一个简单的家乡网站
- java简历校园经历_简历校园经历如何编
- 一阶二阶常微分方程解法
- 下载网站的ICO图标方法
- react全局状态管理_Recoil - Facebook 官方 React 状态管理器
- matlab tecplot data,MATLAB讀取TECPLOT笛卡爾網格三維流場數據
- java线程详细介绍
热门文章
- 更新mac自带的python
- 【转载】别了,摩托罗拉(十一):小高尔文“新政”
- 如何减小数据库日志文件.ldf
- [翻译]XNA 3.0 Game Programming Recipes之six
- oracle 能被2整除_整除专题基础篇 “刀法四式”
- datalist获取id传到下一个页面_如何在 Serverless 架构下优雅上传文件?
- 网络七层协议(转载)
- visual studio运行时库MT、MTd、MD、MDd的区别
- C++中回调(CallBack)的使用方法
- c语言考试笔试技巧,全国二级C语言,要考试了这些技巧你知道么?