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检测远程服务器tcp端口的方法
Mar 14 Python
python判断字符串编码的简单实现方法(使用chardet)
Jul 01 Python
Python编程判断一个正整数是否为素数的方法
Apr 14 Python
Python单例模式的两种实现方法
Aug 14 Python
创建Django项目图文实例详解
Jun 06 Python
Django 多表关联 存储 使用方法详解 ManyToManyField save
Aug 09 Python
详解python中各种文件打开模式
Jan 19 Python
Python实现疫情通定时自动填写功能(附代码)
May 27 Python
如何在Python对Excel进行读取
Jun 04 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
Jun 28 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
Dec 14 Python
Python实现byte转integer
Jun 03 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 cron中的批处理
2008/09/16 PHP
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
深入解析phpCB批量转换的代码示例
2013/06/27 PHP
php的数组与字符串的转换函数整理汇总
2013/07/18 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
2014/05/09 PHP
Laravel5.4简单实现app接口Api Token认证方法
2019/08/29 PHP
js 日期转换成中文格式的函数
2009/07/07 Javascript
JavaScript中的DSL元编程介绍
2015/03/15 Javascript
浅析javascript中的事件代理
2015/11/06 Javascript
jQuery针对input的class属性写了多个值情况下的选择方法
2016/06/03 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图的组合双轴图效果示例【附demo源码下载】
2017/03/09 Javascript
Javascript实现跨域后台设置拦截的方法详解
2017/08/04 Javascript
React Native时间转换格式工具类分享
2017/10/24 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
使用Sonarqube扫描Javascript代码的示例
2018/12/26 Javascript
es6数值的扩展方法
2019/03/11 Javascript
JavaScript实现简单计算器
2020/03/19 Javascript
jQuery实现本地存储
2020/12/22 jQuery
收藏整理的一些Python常用方法和技巧
2015/05/18 Python
python实现遍历文件夹修改文件后缀
2018/08/28 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
python正则表达式匹配IP代码实例
2019/12/28 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
荷兰领先的百货商店:De Bijenkorf
2018/10/17 全球购物
企业面试题试卷附带答案
2015/12/20 面试题
行政总监岗位职责
2013/12/05 职场文书
客房主管岗位职责
2013/12/09 职场文书
趣味游戏活动方案
2014/02/07 职场文书
会走路的树教学反思
2014/02/20 职场文书
高中生国庆节演讲稿范文2014
2014/09/21 职场文书
python中os.path.join()函数实例用法
2021/05/26 Python
Android Flutter实现3D动画效果示例详解
2022/04/07 Java/Android