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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 吃了发霉的蚝油怎么办 蛋皮干燥起皮怎么办 wps卡顿资料没保存怎么办 手指受伤肉掉了怎么办 手机被wifi禁了怎么办 母乳一边是咸的怎么办 tcl电视蓝频了怎么办 长虹电视蓝频了怎么办 电视突然蓝频了怎么办 海信电视蓝频了怎么办 连网电视蓝频了怎么办 英雄联盟画面卡顿怎么办 长残了怎么办原来很帅 被吓到了怎么办没精神 宝宝吓着怎么办最有效 4个月婴儿易惊吓怎么办 心里有问题的人怎么办 减肥的时候想吃东西怎么办 大联盟ping很高怎么办 酷派手机弹广告怎么办 孕早期肚子紧绷怎么办 怀孕2个月同房了怎么办 怀孕前三月同房了怎么办 人流前三天同房了怎么办 人流后三天同房了怎么办 吃避孕药后月经量少怎么办 排卵日同房不想怀孕怎么办 排卵日同房没有怀孕怎么办 想怀孕想生儿子怎么办 到期大姨妈不来怎么办 怕怀孕月经不来怎么办 宫颈环扎后宫缩怎么办 来例假刺激外阴高潮了怎么办 客人消费完说没钱怎么办? 孕13周血糖偏高怎么办 餐后血糖高14点怎么办 餐后血糖20多怎么办 空腹血糖6.6饭后9.2怎么办 键盘shift键失效了怎么办 灵异附身夫妻不合怎么办 鞋子买大了半码怎么办