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 从远程服务器下载日志文件的程序
Feb 10 Python
在Python中使用判断语句和循环的教程
Apr 25 Python
深入解析Python中函数的参数与作用域
Mar 20 Python
Python实现基本数据结构中队列的操作方法示例
Dec 04 Python
python指定写入文件时的编码格式方法
Jun 07 Python
python变量赋值方法(可变与不可变)
Jan 12 Python
python 发送和接收ActiveMQ消息的实例
Jan 30 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
Pandas实现dataframe和np.array的相互转换
Nov 30 Python
tensorflow 保存模型和取出中间权重例子
Jan 24 Python
Python 实现PS滤镜的旋涡特效
Dec 03 Python
python实现自动清理文件夹旧文件
May 10 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验证码(支持中文)
2007/02/14 PHP
基于session_unset与session_destroy的区别详解
2013/06/03 PHP
ThinkPHP的cookie和session冲突造成Cookie不能使用的解决方法
2014/07/01 PHP
php循环table实现一行两列显示的方法
2015/06/04 PHP
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
jquery zTree异步加载简单实例分享
2013/02/05 Javascript
js获取键盘按键响应事件(兼容各浏览器)
2013/05/16 Javascript
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
node.js中的fs.chownSync方法使用说明
2014/12/16 Javascript
用JS实现图片轮播效果代码(一)
2016/06/26 Javascript
B/S(Web)实时通讯解决方案分享
2017/04/06 Javascript
深入浅析JS中的严格模式
2018/06/04 Javascript
Seajs源码详解分析
2019/04/02 Javascript
vue中@change兼容问题详解
2019/10/25 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
vuex分模块后,实现获取state的值
2020/07/26 Javascript
[22:59]VGJ.S vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
python实现网站的模拟登录
2016/01/04 Python
Python正则抓取网易新闻的方法示例
2017/04/21 Python
python3实现公众号每日定时发送日报和图片
2018/02/24 Python
pycharm安装和首次使用教程
2018/08/27 Python
python基础梳理(一)(推荐)
2019/04/06 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
基于Python获取城市近7天天气预报
2019/11/26 Python
使用python快速实现不同机器间文件夹共享方式
2019/12/22 Python
Python sqlalchemy时间戳及密码管理实现代码详解
2020/08/01 Python
关于礼仪的演讲稿
2014/01/04 职场文书
大学生个人自荐信
2014/02/24 职场文书
检举信的格式及范文
2014/04/04 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
个人创业事迹材料
2014/12/30 职场文书
秦兵马俑导游词
2015/02/02 职场文书
服务员岗位职责
2015/02/03 职场文书
安全保证书格式
2015/02/28 职场文书
MySQL和Oracle批量插入SQL的通用写法示例
2021/11/17 MySQL