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中的类与对象之描述符详解
Mar 27 Python
用Python的线程来解决生产者消费问题的示例
Apr 02 Python
Python实现爬取逐浪小说的方法
Jul 07 Python
Python用zip函数同时遍历多个迭代器示例详解
Nov 14 Python
python版学生管理系统
Jan 10 Python
Python 循环语句之 while,for语句详解
Apr 23 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
Jul 04 Python
django如何通过类视图使用装饰器
Jul 24 Python
解决os.path.isdir() 判断文件夹却返回false的问题
Nov 29 Python
pytorch 准备、训练和测试自己的图片数据的方法
Jan 10 Python
自定义Django默认的sitemap站点地图样式
Mar 04 Python
如何通过安装HomeBrew来安装Python3
Dec 23 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 多维数组排序实现代码
2009/08/05 PHP
php之Smarty模板使用方法示例详解
2014/07/08 PHP
详解PHP用substr函数截取字符串中的某部分
2016/12/03 PHP
php实现的统计字数函数定义与使用示例
2017/07/26 PHP
PHP使用XMLWriter读写xml文件操作详解
2018/07/31 PHP
Laravel 解决composer相关操作提示php相关异常的问题
2019/10/23 PHP
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
JQuery 操作Javascript对象和数组的工具函数小结
2010/01/22 Javascript
Js注册协议倒计时的小例子
2013/06/24 Javascript
javascript中的五种基本数据类型
2015/08/26 Javascript
JS判断当前页面是否在微信浏览器打开的方法
2015/12/08 Javascript
javascript验证内容为数字以及长度为10的简单实例
2016/08/20 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
[02:15]你好,这就是DOTA!
2015/08/05 DOTA
[01:08:00]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python自动重试HTTP连接装饰器
2015/04/28 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
django加载本地html的方法
2018/05/27 Python
pandas读取csv文件,分隔符参数sep的实例
2018/12/12 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
Julep官网:美容产品和指甲油
2017/02/25 全球购物
汤米巴哈马官方网站:Tommy Bahama
2017/05/13 全球购物
MaBelle玛贝尔香港官网:香港钻饰连锁店
2019/09/09 全球购物
《登鹳雀楼》教学反思
2014/04/09 职场文书
安全宣传标语
2014/06/10 职场文书
先进基层党组织材料
2014/12/25 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
致我们终将逝去的青春观后感
2015/06/10 职场文书
JavaScript 去重和重复次数统计
2021/03/31 Javascript
go语言-在mac下brew升级golang
2021/04/25 Golang
JavaScript实现显示和隐藏图片
2021/04/29 Javascript
一文搞懂Redis中String数据类型
2022/04/03 Redis
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python