python设计模式之命名模式
来源:互联网 发布:阿里云https部署 编辑:程序博客网 时间:2024/06/06 16:50
python设计模式之命名模式
意图
- 将请求封装成一个对象,从而使你可用不同的请求对客户端进行进行参数化,对请求排队或记录请求日志,以及支持可撤销的动作
解决的问题
- 在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适
适用性
- 当需要对行为进行“记录、撤销/重做”等处理时
- 系统需要将请求者和接收者解耦,使得调用者和接收者不直接交互
- 系统需要在不同时间指定请求、请求排队和执行请求
- 系统需要将一组操作组合在一起,即支持宏命令
- 支持修改日志,这样当系统崩溃时,这些修改可以被重做一遍。
例子
# -*- coding=utf-8 -*-import osclass MoveFileCommand(object): def __init__(self, src, dest): self.src = src self.dest = dest def execute(self): self() def __call__(self): print('renaming {} to {}'.format(self.src, self.dest)) os.rename(self.src, self.dest) def undo(self): print('renaming {} to {}'.format(self.dest, self.src)) os.rename(self.dest, self.src)if __name__ == "__main__": command_stack = list() command_stack.append(MoveFileCommand('foo.txt', 'bar.txt')) command_stack.append(MoveFileCommand('bar.txt', 'baz.txt')) for cmd in command_stack: cmd.execute() for cmd in reversed(command_stack): cmd.undo()# 输出:renaming foo.txt to bar.txtrenaming bar.txt to baz.txtrenaming baz.txt to bar.txtrenaming bar.txt to foo.txt
阅读全文
0 0
- python设计模式之命名模式
- 实战设计模式之命名模式
- 实战设计模式之命名模式
- python设计模式之设计模式简介
- python设计模式之状态设计模式
- 设计模式-命名空间
- 设计模式命名规范
- python设计模式 之 简单工厂模式
- python 设计模式之 单例模式
- python设计模式之访问者模式
- python设计模式之备忘录模式
- python设计模式之对象池模式
- python设计模式之代理模式
- python设计模式之模板方法模式
- python设计模式之Null模式
- python设计模式之桥接模式
- python设计模式之组合模式
- python设计模式之责任链模式
- Android中ImageView的点击变暗效果
- 日常笔记之makefile中的ifeq ifdef
- C语言问题,在位运算中,操作数每右移一位,其结果相当于什么?若左移1位,其结果相当于什么?
- Linux 服务端大并发-初步
- vi命令显示行号
- python设计模式之命名模式
- Spring注解@Resource和@Autowired区别对比
- C-sizeof 关键字的应用
- 关于anaconda下pip安装步骤
- 学生信息管理系统错误集(三)
- java多线程
- 运算符中,优先级高低总结。
- input框的placeholder使用line-height在Safari上不垂直居中的问题
- 输入型参数和输出型参数