设计模式-命令模式-command-python
来源:互联网 发布:snp面膜怎么样知乎 编辑:程序博客网 时间:2024/05/02 00:04
def
将一个请求封装成一个对象, 从而让你使用不同的请求把客户端参数化, 对请求排队或者记录请求日志, 可以提供命令的撤销和恢复功能。
usage
● 类间解耦
调用者角色与接收者角色之间没有任何依赖关系, 调用者实现功能时只需调用Command抽象类的execute方法就可以, 不需要了解到底是哪个接收者执行。
● 可扩展性
Command的子类可以非常容易地扩展, 而调用者Invoker和高层次的模块Client不产生严重的代码耦合。
● 命令模式结合其他模式会更优秀
命令模式可以结合责任链模式, 实现命令族解析任务; 结合模板方法模式, 则可以减少Command子类的膨胀问题。
code
class MoveFileCommand(object): def __init__(self, src, dest): self.src = src self.dest = dest def execute(self): self.rename(self.src, self.dest) def undo(self): self.rename(self.dest, self.src) def rename(self, src, dest): print(u"renaming %s to %s" % (src, dest)) os.rename(src, dest)def main(): command_stack = [] # commands are just pushed into the command stack command_stack.append(MoveFileCommand('foo.txt', 'bar.txt')) command_stack.append(MoveFileCommand('bar.txt', 'baz.txt')) # verify that none of the target files exist assert(not lexists("foo.txt")) assert(not lexists("bar.txt")) assert(not lexists("baz.txt")) try: with open("foo.txt", "w"): # Creating the file pass # they can be executed later on for cmd in command_stack: cmd.execute() # and can also be undone at will for cmd in reversed(command_stack): cmd.undo() finally: os.unlink("foo.txt")if __name__ == "__main__": main()### OUTPUT #### renaming foo.txt to bar.txt# renaming bar.txt to baz.txt# renaming baz.txt to bar.txt# renaming bar.txt to foo.txt
阅读全文
0 0
- 设计模式-命令模式-command-python
- Command(命令)设计模式
- 设计模式----Command(命令)模式
- 设计模式--命令模式(Command)
- [设计模式]Command命令模式
- [设计模式]命令模式(Command)
- 设计模式--命令模式Command
- 设计模式: 命令(command)模式
- 设计模式:命令模式-command
- 设计模式之Command(命令)
- 设计模式学习-Command(命令)
- 设计模式:Command(命令)
- 命令设计模式(Command Pattern)
- 设计模式(16)-命令模式(Command)
- 设计模式之Command命令模式
- 设计模式 - Command Pattern(命令模式)
- 设计模式 - Command Pattern(命令模式)
- 设计模式之Command - 命令模式
- FFT & NTT 学习 模板
- 数据结构-哈希表原理详解
- Servlet单例多线程工作机制
- 阿里云上部署kafka--遇到的坑
- 进击的DP----数位DP入门到理解
- 设计模式-命令模式-command-python
- Nginx的Session一致性
- 关于ntp时间同步理论及配置参数20170804
- 常用的接口对接
- bootstrap导出table数据到excel
- 二叉树非递归遍历方法
- 获取python包的路径
- POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化)
- 密码显示和隐藏