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字符串连接方式汇总
Aug 21 Python
Python对象体系深入分析
Oct 28 Python
python中的错误处理
Apr 10 Python
Python pass详细介绍及实例代码
Nov 24 Python
Python守护线程用法实例
Jun 23 Python
Python实现按逗号分隔列表的方法
Oct 23 Python
Python面向对象进阶学习
May 21 Python
在Django model中设置多个字段联合唯一约束的实例
Jul 17 Python
PyQt+socket实现远程操作服务器的方法示例
Aug 22 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
Feb 27 Python
python2.7使用scapy发送syn实例
May 05 Python
看看如何用Python绘制小米新版天价logo
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数组
2006/10/09 PHP
基于php使用memcache存储session的详解
2013/06/25 PHP
php实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
PHP中的替代语法介绍
2015/01/09 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
微信API接口大全
2015/04/15 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
php微信公众账号开发之前五个坑(一)
2016/09/18 PHP
PHP开发中解决并发问题的几种实现方法分析
2017/11/13 PHP
javascript获取设置div的高度和宽度兼容任何浏览器
2013/09/22 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
JavaScript和CSS交互的方法汇总
2014/12/02 Javascript
Node.js开发之访问Redis数据库教程
2015/01/14 Javascript
js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
2015/09/14 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
20170918 前端开发周报之JS前端开发必看
2017/09/18 Javascript
JavaScript继承定义与用法实践分析
2018/05/28 Javascript
vue3为什么要用proxy替代defineProperty
2020/10/19 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
python变量不能以数字打头详解
2016/07/06 Python
Python实现按学生年龄排序的实际问题详解
2017/08/29 Python
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
linux环境下的python安装过程图解(含setuptools)
2017/11/22 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
Django  ORM 练习题及答案
2019/07/19 Python
使用pytorch搭建AlexNet操作(微调预训练模型及手动搭建)
2020/01/18 Python
Pycharm中配置远程Docker运行环境的教程图解
2020/06/11 Python
会计专业自荐信范文
2015/03/05 职场文书
网吧管理制度范本
2015/08/05 职场文书
初三化学教学反思
2016/02/22 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书
《孙子兵法》:欲成大事者,需读懂这些致胜策略
2019/08/23 职场文书
Python中字符串对象语法分享
2022/02/24 Python
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python