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数据结构之二叉树的统计与转换实例
Apr 29 Python
Python中urllib+urllib2+cookielib模块编写爬虫实战
Jan 20 Python
利用Python脚本生成sitemap.xml的实现方法
Jan 31 Python
Python 打印中文字符的三种方法
Aug 14 Python
解决Python一行输出不显示的问题
Dec 03 Python
python 列表中[ ]中冒号‘:’的作用
Apr 30 Python
python格式化输出保留2位小数的实现方法
Jul 02 Python
python生成大写32位uuid代码
Mar 03 Python
Python-openCV开运算实例
Jul 05 Python
pytorch随机采样操作SubsetRandomSampler()
Jul 07 Python
Python使用sys.exc_info()方法获取异常信息
Jul 23 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
Sep 01 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
mysql 查询指定日期时间内sql语句实现原理与代码
2012/12/16 PHP
php+xml编程之xpath的应用实例
2015/01/24 PHP
php禁止某ip或ip地址段访问的方法
2015/02/25 PHP
PHP中的traits简单使用实例
2015/05/13 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
jquery自动完成插件(autocomplete)应用之PHP版
2009/12/15 Javascript
基于node.js的快速开发透明代理
2010/12/25 Javascript
MooTools 页面滚动浮动层智能定位实现代码
2011/08/23 Javascript
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
jquery实现拖拽调整Div大小
2015/01/30 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
JavaScript中的ParseInt("08")和“09”返回0的原因分析及解决办法
2016/05/19 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
2016/06/20 Javascript
基于Layer+jQuery的自定义弹框
2020/05/26 Javascript
JavaScript 巧学巧用
2017/05/23 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
分享5个顶级的JavaScript Ajax组件库
2018/09/16 Javascript
微信小程序自定义菜单切换栏tabbar组件代码实例
2019/12/30 Javascript
JS实现网页烟花动画效果
2020/03/10 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
python脚本监控docker容器
2016/04/27 Python
Python之父谈Python的未来形式
2016/07/01 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
浅析python标准库中的glob
2020/03/13 Python
python中如何设置代码自动提示
2020/07/15 Python
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
介绍一下Java的安全机制
2012/06/28 面试题
文员试用期转正自我鉴定
2014/09/14 职场文书
骨干教师事迹材料
2014/12/17 职场文书
停水通知
2015/04/16 职场文书
联谊活动总结范文
2015/05/09 职场文书
安装配置mysql及Navicat prenium的详细流程
2021/06/10 MySQL