Python设计模式之备忘录模式原理与用法详解


Posted in Python onJanuary 15, 2019

本文实例讲述了Python设计模式之备忘录模式原理与用法。分享给大家供大家参考,具体如下:

备忘录模式(Memento Pattern):不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,这样已经后就可将该对象恢复到原先保存的状态

下面是一个备忘录模式的demo:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
__author__ = 'Andy'
"""
大话设计模式
设计模式——备忘录模式
备忘录模式(Memento Pattern):不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,这样已经后就可将该对象恢复到原先保存的状态
"""
# 发起人类
class Originator(object):
  def __init__(self, state):
    self.state = state
  def create_memento(self):
    return Memento(self.state)
  def set_memento(self, memento):
    self.state = memento.state
  def show(self):
    print "当前状态 ", self.state
# 备忘录类
class Memento(object):
  def __init__(self, state):
    self.state = state
# 管理者类
class Caretaker(object):
  def __init__(self,memento):
    self.memento = memento
if __name__ == "__main__":
  # 初始状态
  originator = Originator(state='On')
  originator.show()
  # 备忘录
  caretaker = Caretaker(originator.create_memento())
  # 修改状态
  originator.state = 'Off'
  originator.show()
  # 复原状态
  originator.set_memento(caretaker.memento)
  originator.show()

运行结果:

当前状态  On
当前状态  Off
当前状态  On

上面的类的设计如下图:

Python设计模式之备忘录模式原理与用法详解

Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态,Originator可根据需要决定Memento存储Originator的那些内部状态

Memento(备忘录):负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录Memento

Caretaker(管理者):负责保存好备忘录Memento,不能对备忘录的内容进行操作或检查

更多关于Python相关内容可查看本站专题:《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python性能优化的20条建议
Oct 25 Python
深入解析Python中的变量和赋值运算符
Oct 12 Python
Python通过DOM和SAX方式解析XML的应用实例分享
Nov 16 Python
Python读写Json涉及到中文的处理方法
Sep 12 Python
利用Python破解验证码实例详解
Dec 08 Python
python发送邮件脚本
May 22 Python
Python 读取用户指令和格式化打印实现解析
Sep 02 Python
将pytorch转成longtensor的简单方法
Feb 18 Python
python+opencv边缘提取与各函数参数解析
Mar 09 Python
Python内置异常类型全面汇总
May 28 Python
Tensorflow中k.gradients()和tf.stop_gradient()用法说明
Jun 10 Python
Python实现天气查询软件
Jun 07 Python
matplotlib.pyplot绘图显示控制方法
Jan 15 #Python
python实现彩色图转换成灰度图
Jan 15 #Python
Python中new方法的详解
Jan 15 #Python
Python之循环结构
Jan 15 #Python
python实现图片彩色转化为素描
Jan 15 #Python
带你认识Django
Jan 15 #Python
Python数据可视化库seaborn的使用总结
Jan 15 #Python
You might like
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
php实现简单洗牌算法
2013/06/18 PHP
PHP实现数字补零功能的2个函数介绍
2014/05/12 PHP
php运行时动态创建函数的方法
2015/03/16 PHP
PHP 数组黑名单/白名单实例代码详解
2019/06/04 PHP
php面向对象程序设计入门教程
2019/06/22 PHP
用javascript实现兼容IE7的类库 IE7_0_9.zip提供下载
2007/08/08 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
2013/06/25 Javascript
js中如何复制一个对象并获取其所有属性和属性对应的值
2013/10/24 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
从零学习node.js之模块规范(一)
2017/02/21 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
推荐10款扩展Web表单的JS插件
2017/12/25 Javascript
vue.js实现只弹一次弹框
2018/01/29 Javascript
angularJs使用ng-repeat遍历后选中某一个的方法
2018/09/30 Javascript
JavaScript实现简单贪吃蛇效果
2020/03/09 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
利用Python进行数据可视化常见的9种方法!超实用!
2018/07/11 Python
python reverse反转部分数组的实例
2018/12/13 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
总结python中pass的作用
2019/02/27 Python
python提取xml里面的链接源码详解
2019/10/15 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
2019/10/28 Python
Html5+JS实现手机摇一摇功能
2015/04/24 HTML / CSS
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
大学生职业规划书的范本
2014/02/18 职场文书
2014年教育教学工作总结
2014/11/13 职场文书
骨干教师申报材料
2014/12/17 职场文书
大学生在校表现评语
2014/12/31 职场文书
全国法制宣传日活动总结
2015/05/05 职场文书
导游词之吉林花园山
2019/10/17 职场文书
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
2021/11/11 Python