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读写unicode文件的方法
Jul 10 Python
理解python正则表达式
Jan 15 Python
Python实现单词翻译功能
Jun 06 Python
Python删除Java源文件中全部注释的实现方法
Aug 30 Python
微信跳一跳python辅助脚本(总结)
Jan 11 Python
Python 根据数据模板创建shapefile的实现
Nov 26 Python
Python异常原理及异常捕捉实现过程解析
Mar 25 Python
pyecharts在数据可视化中的应用详解
Jun 08 Python
Python中bisect的用法及示例详解
Jul 20 Python
python实现数学模型(插值、拟合和微分方程)
Nov 13 Python
Python趣味挑战之教你用pygame画进度条
May 31 Python
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
Apr 20 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
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
php 文章采集正则代码
2009/12/28 PHP
php Rename 更改文件、文件夹名称
2011/05/24 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
php笔记之:文章中图片处理的使用
2013/04/26 PHP
PHP生成不重复标识符的方法
2014/11/21 PHP
Thinkphp微信公众号支付接口
2016/08/04 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
JQuery datepicker 使用方法
2011/05/20 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
2014/12/02 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
2015/05/11 Javascript
jQuery 获取遍历获取table中每一个tr中的第一个td的方法
2016/10/05 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
Angularjs中的验证input输入框只能输入数字和小数点的写法(推荐)
2017/08/16 Javascript
Angularjs实现页面模板清除的方法
2018/07/20 Javascript
jQuery实现网页拼图游戏
2020/04/22 jQuery
vue中使用GraphQL的实例代码
2019/11/04 Javascript
Python实现对excel文件列表值进行统计的方法
2015/07/25 Python
解决phantomjs截图失败,phantom.exit位置的问题
2018/05/17 Python
Python运维之获取系统CPU信息的实现方法
2018/06/11 Python
浅析Python函数式编程
2018/10/06 Python
解决python2 绘图title,xlabel,ylabel出现中文乱码的问题
2019/01/29 Python
Python实例方法、类方法、静态方法的区别与作用详解
2019/03/25 Python
详解java调用python的几种用法(看这篇就够了)
2020/12/10 Python
Python中读取文件名中的数字的实例详解
2020/12/25 Python
Gap英国官网:Gap UK
2018/07/18 全球购物
三八妇女节演讲稿
2014/05/27 职场文书
人力资源职位说明书
2014/07/29 职场文书
校运动会广播稿(100篇)
2014/09/12 职场文书
开国大典观后感
2015/06/04 职场文书
朋友离别感言
2015/08/04 职场文书
解决Laravel使用验证时跳转到首页的问题
2021/11/17 PHP
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技