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 08 Python
利用Python批量生成任意尺寸的图片
Aug 29 Python
Python实现的NN神经网络算法完整示例
Jun 19 Python
配置 Pycharm 默认 Test runner 的图文教程
Nov 30 Python
对django xadmin自定义菜单的实例详解
Jan 03 Python
python gdal安装与简单使用
Aug 01 Python
Python爬虫:url中带字典列表参数的编码转换方法
Aug 21 Python
Python缓存技术实现过程详解
Sep 25 Python
python socket 聊天室实例代码详解
Nov 14 Python
解决Python使用列表副本的问题
Dec 19 Python
python如何实现word批量转HTML
Sep 30 Python
python神经网络 使用Keras构建RNN训练
May 04 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概述.
2006/10/09 PHP
Ajax+PHP 边学边练 之二 实例
2009/11/24 PHP
PHP中替换换行符的几种方法小结
2012/10/15 PHP
php遍历数组的4种方法总结
2014/07/05 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
Mac系统完美安装PHP7详细教程
2017/06/06 PHP
JavaScript与DropDownList 区别分析
2010/01/01 Javascript
Javascript模块化编程详解
2014/12/01 Javascript
js实现完全自定义可带多级目录的网页鼠标右键菜单方法
2015/02/28 Javascript
JavaScript点击按钮后弹出透明浮动层的方法
2015/05/11 Javascript
详解JavaScript中数组的相关知识
2015/07/29 Javascript
javascript实现图片轮播效果
2016/01/20 Javascript
BootStrap实现文件上传并带有进度条效果
2017/09/11 Javascript
Angular模版驱动表单的使用总结
2018/05/05 Javascript
JavaScript实现读取与输出XML文件数据的方法示例
2018/06/05 Javascript
详解webpack自定义loader初探
2018/08/29 Javascript
微信小程序实现复选框效果
2018/12/28 Javascript
JQuery的加载和选择器用法简单示例
2019/05/13 jQuery
JS中队列和双端队列实现及应用详解
2020/09/29 Javascript
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
[57:36]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第三场 2月1日
2021/03/11 DOTA
python实现探测socket和web服务示例
2014/03/28 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
2016/12/04 Python
NumPy 如何生成多维数组的方法
2018/02/05 Python
Python输出\u编码将其转换成中文的实例
2018/12/15 Python
python使用PyQt5的简单方法
2019/02/27 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
老海军美国官网:Old Navy
2016/09/05 全球购物
大学生优秀团员事迹材料
2014/01/30 职场文书
房屋租赁协议书
2014/04/10 职场文书
话题作文之自信作文
2019/11/15 职场文书