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 相关文章推荐
Web服务器框架 Tornado简介
Jul 16 Python
python字典多键值及重复键值的使用方法(详解)
Oct 31 Python
Python中装饰器兼容加括号和不加括号的写法详解
Jul 05 Python
Python引用传值概念与用法实例小结
Oct 07 Python
PyQt5每天必学之组合框
Apr 20 Python
解决python中 f.write写入中文出错的问题
Oct 31 Python
Python pygame绘制文字制作滚动文字过程解析
Dec 12 Python
python__new__内置静态方法使用解析
Jan 07 Python
Pycharm 2020年最新激活码(亲测有效)
Sep 18 Python
使用Python操作ArangoDB的方法步骤
Feb 02 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
Feb 25 Python
pytorch实现加载保存查看checkpoint文件
Jul 15 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
用Zend Encode编写开发PHP程序
2010/02/21 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
php自定义类fsocket模拟post或get请求的方法
2015/07/31 PHP
PHP中用mysqli面向对象打开连接关闭mysql数据库的方法
2016/11/05 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
2016/11/09 PHP
JS函数验证总结(方便js客户端输入验证)
2010/10/29 Javascript
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
JS代码优化技巧之通俗版(减少js体积)
2011/12/23 Javascript
不想让浏览器运行javascript脚本的方法
2015/11/20 Javascript
12 款 JS 代码测试必备工具(翻译)
2016/12/13 Javascript
用jQuery实现可输入多选下拉组合框实例代码
2017/01/18 Javascript
详解vue服务端渲染(SSR)初探
2017/06/19 Javascript
JS实现的全排列组合算法示例
2017/10/09 Javascript
express express-session的使用小结
2018/12/12 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
python dataframe常见操作方法:实现取行、列、切片、统计特征值
2018/06/09 Python
Python函数中不定长参数的写法
2019/02/13 Python
python调用matlab的m自定义函数方法
2019/02/18 Python
python字典的常用方法总结
2019/07/31 Python
学习Django知识点分享
2019/09/11 Python
python 函数的缺省参数使用注意事项分析
2019/09/17 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
2020/03/09 Python
python和JavaScript哪个容易上手
2020/06/23 Python
python实现人工蜂群算法
2020/09/18 Python
白兰氏健康Mall:BRAND’S
2017/11/13 全球购物
德国最大的设计师鞋网上商店:Budapester
2017/12/07 全球购物
JAKO-O德国野酷台湾站:德国首屈一指的婴幼童用品品牌
2019/01/14 全球购物
aden + anais英国官网:美国婴儿贴身用品品牌
2019/09/08 全球购物
什么是类的返射机制
2016/02/06 面试题
优秀党员转正的自我评价
2013/10/06 职场文书
汽车运用工程专业毕业生推荐信
2013/12/25 职场文书
小区推广策划方案
2014/06/06 职场文书
司法助理专业自荐书
2014/06/13 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
薪资证明范本
2015/06/19 职场文书
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle