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专用方法与迭代机制实例分析
Sep 15 Python
python实现从网络下载文件并获得文件大小及类型的方法
Apr 28 Python
简单的连接MySQL与Python的Bottle框架的方法
Apr 30 Python
Python基于二分查找实现求整数平方根的方法
May 12 Python
解决python3 pika之连接断开的问题
Dec 18 Python
解决python tkinter界面卡死的问题
Jul 17 Python
解决Python二维数组赋值问题
Nov 28 Python
Python *args和**kwargs用法实例解析
Mar 02 Python
在Python IDLE 下调用anaconda中的库教程
Mar 09 Python
python实现简单俄罗斯方块
Mar 13 Python
Python 实现PS滤镜的旋涡特效
Dec 03 Python
Python函数式编程中itertools模块详解
Sep 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
PHP代码网站如何防范SQL注入漏洞攻击建议分享
2012/03/01 PHP
codeigniter框架批量插入数据
2014/01/09 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
iphone safari不支持position fixed的解决方法
2012/05/04 Javascript
页面定时刷新(1秒刷新一次)
2013/11/22 Javascript
javascript实现信息的显示和隐藏如注册页面
2013/12/03 Javascript
jQuery判断div随滚动条滚动到一定位置后停止
2014/04/02 Javascript
Express.JS使用详解
2014/07/17 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
js运动事件函数详解
2016/10/21 Javascript
基于bootstrap的选择框插件icheck
2016/12/23 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
2019/05/01 Javascript
在Vue中使用icon 字体图标的方法
2019/06/14 Javascript
JavaScript:ES2019 的新特性(译)
2019/08/08 Javascript
基于ajax及jQuery实现局部刷新过程解析
2020/09/12 jQuery
vant时间控件使用方法详解
2020/12/24 Javascript
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
python类参数self使用示例
2014/02/17 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
使用PYTHON解析Wireshark的PCAP文件方法
2019/07/23 Python
python 实现按对象传值
2019/12/26 Python
torch 中各种图像格式转换的实现方法
2019/12/26 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
对python中list的五种查找方法说明
2020/07/13 Python
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
html如何对span设置宽度
2019/10/30 HTML / CSS
北京麒麟网信息技术有限公司网络游戏测试面试题
2013/09/28 面试题
保护黄河倡议书
2014/05/16 职场文书
民主生活会意见
2015/06/05 职场文书
Win11怎么添加用户?Win11添加用户账户的方法
2022/07/15 数码科技