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 相关文章推荐
利用soaplib搭建webservice详细步骤和实例代码
Nov 20 Python
python生成指定尺寸缩略图的示例
May 07 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
Jun 26 Python
python使用psutil模块获取系统状态
Aug 27 Python
发布你的Python模块详解
Sep 15 Python
Python实现端口检测的方法
Jul 24 Python
python flask实现分页的示例代码
Aug 02 Python
Python数据可视化之画图
Jan 15 Python
Python批量删除只保留最近几天table的代码实例
Apr 01 Python
django的ORM操作 增加和查询
Jul 26 Python
解决django的template中如果无法引用MEDIA_URL问题
Apr 07 Python
python对execl 处理操作代码
Jun 22 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
同台服务器使用缓存APC效率高于Memcached的演示代码
2010/02/16 PHP
PHP的autoload自动加载机制使用说明
2010/12/28 PHP
php阻止页面后退的方法分享
2014/02/17 PHP
深入php内核之php in array
2015/11/10 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
phpstudy2020搭建站点的实现示例
2020/10/30 PHP
JS实现从顶部下拉显示的带动画QQ客服特效代码
2015/10/24 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
javascript简单比较日期大小的方法
2016/01/05 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
全面解析多种Bootstrap图片轮播效果
2016/05/27 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
js实现图片左右滚动效果
2017/02/27 Javascript
JavaScript实现星星等级评价功能
2017/03/22 Javascript
vue-cli 自定义指令directive 添加验证滑块示例
2017/10/19 Javascript
微信小程序实现预览图片功能
2020/10/22 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
使用Python求解最大公约数的实现方法
2015/08/20 Python
python如何获取服务器硬件信息
2017/05/11 Python
python实现两张图片拼接为一张图片并保存
2019/07/16 Python
Numpy之reshape()使用详解
2019/12/26 Python
Matplotlib使用字符串代替变量绘制散点图的方法
2020/02/17 Python
服务器端jupyter notebook映射到本地浏览器的操作
2020/04/14 Python
浅谈three.js中的needsUpdate的应用
2012/11/12 HTML / CSS
HTML table 表格边框的实现思路
2019/10/12 HTML / CSS
京剧自荐信
2014/01/26 职场文书
优秀幼教自荐信
2014/02/03 职场文书
优秀党员先进事迹材料
2014/12/18 职场文书
党风廉正建设责任书
2015/01/29 职场文书
保护校园环境倡议书
2015/04/28 职场文书
暑假打工感想
2015/08/07 职场文书
超市啤酒狂欢夜策划方案范文!
2019/07/03 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python
如何理解及使用Python闭包
2021/06/01 Python
德生TECSUN S-2000使用手册文字版
2022/05/10 无线电