1.应用场景

(1)能保存对象的状态,并能够恢复到之前的状态

2.代码实现

#!/usr/bin/env python
#! _*_ coding:UTF-8 _*_

class Originator(object):
    '''这时基本类'''
    def __init__(self, state):
        self.state = state

    def createMemento(self):
        '''创建备忘录'''
        return Memento(self.state)

    def setMemento(self, memento):
        '''从备忘录中恢复'''
        self.state = memento.state

class Memento(object):
    '''这时备忘录类'''
    def __init__(self, state):
        self.state = state

class Caretaker(object):
    '''这时备忘录管理类'''
    def __init__(self):
        pass

    def setMemento(self, memento):
        '''将备忘录作为引用'''
        self.memento = memento

    def getMemento(self):
        '''从管理中获取引用'''
        return self.memento

if __name__ == "__main__":
    originator = Originator("state1")
    print originator.state

    memento = originator.createMemento()
    caretaker = Caretaker()
    caretaker.setMemento(memento)

    originator.state = "state2"
    print originator.state

    originator.setMemento(caretaker.getMemento())
    print originator.state

结果:

/Users/liudaoqiang/PycharmProjects/numpy/venv/bin/python /Users/liudaoqiang/Project/python_project/day22_memento/memento_test.py
state1
state2
state1

Process finished with exit code 0

python设计模式第二十二天【备忘录模式】的更多相关文章

  1. Python设计模式: 最佳的"策略"模式实践代码

    Python设计模式: 最佳的"策略"模式实践代码 今天抽空看了下流畅的python,发现里面介绍了不少python自带的库的使用实例,用起来非常的优雅. 平时用Python来写爬 ...

  2. python设计模式之常用创建模式总结(二)

    前言 设计模式的创建模式终极目标是如何使用最少量最少需要修改的代码,传递最少的参数,消耗系统最少的资源创建可用的类的实例对象. 系列文章 python设计模式之单例模式(一) python设计模式之常 ...

  3. 简介Python设计模式中的代理模式与模板方法模式编程

    简介Python设计模式中的代理模式与模板方法模式编程 这篇文章主要介绍了Python设计模式中的代理模式与模板方法模式编程,文中举了两个简单的代码片段来说明,需要的朋友可以参考下 代理模式 Prox ...

  4. 实例解析Python设计模式编程之桥接模式的运用

    实例解析Python设计模式编程之桥接模式的运用 这篇文章主要介绍了Python设计模式编程之桥接模式的运用,桥接模式主张把抽象部分与它的实现部分分离,需要的朋友可以参考下 我们先来看一个例子: #e ...

  5. 重学 Java 设计模式:实战备忘录模式「模拟互联网系统上线过程中,配置文件回滚场景」

    作者:小傅哥 博客:https://bugstack.cn - 原创系列专题文章 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 实现不了是研发的借口? 实现不了,有时候是功能复杂度较高难以实 ...

  6. python设计模式之责任链模式

    python设计模式之责任链模式 开发一个应用时,多数时候我们都能预先知道哪个方法能处理某个特定请求.然而,情况并非总是如此.例如,想想任意一种广播计算机网络,例如最早的以太网实现.在广播计算机网络中 ...

  7. python设计模式之享元模式

    python设计模式之享元模式 由于对象创建的开销,面向对象的系统可能会面临性能问题.性能问题通常在资源受限的嵌入式系统中出现,比如智能手机和平板电脑.大型复杂系统中也可能会出现同样的问题,因为要在其 ...

  8. python设计模式之修饰器模式

    python设计模式之修饰器模式 无论何时我们想对一个对象添加额外的功能,都有下面这些不同的可选方法. [ ] 如果合理,可以直接将功能添加到对象所属的类(例如,添加一个新的方法) [ ] 使用组合 ...

  9. IOS设计模式之四(备忘录模式,命令模式)

    本文原文请见:http://www.raywenderlich.com/46988/ios-design-patterns. 由 @krq_tiger(http://weibo.com/xmuzyq) ...

随机推荐

  1. 002_浅析python 中__name__ = '__main__' 的作用

    很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...

  2. ssh 免密码登录配置,及其原理

    1.废话不多说,先上图   2. 典型的RSA非对称加密 RSA加密算法是一种典型的非对称加密算法,它基于大数的因式分解数学难题,它也是应用最广泛的非对称加密算法,于1978年由美国麻省理工学院(MI ...

  3. spring-config的坑

    背景 1.修改配置中心读取配置文件的分支,配置了spring.cloud.config.label后,报错,异常大概是读取本地配置文件异常 解决 反复尝试了之后,发现是配置仓库的配置文件格式(yml) ...

  4. Python-网络爬虫模块-requests模块之响应-response

    当requests发送请求成功后,requests就会得到返回值,如果服务器响应正常,就会接收到响应数据: Response响应中的属性和方法 常用属性: status_code: 数据类型:int ...

  5. 根据考试成绩输出对应的礼物,90分以上爸爸给买电脑,80分以上爸爸给买手机, 60分以上爸爸请吃一顿大餐,60分以下爸爸给买学习资料。 要求:该题使用多重if完成

    package com.Summer_0417.cn; import java.util.Scanner; /** * @author Summer * 根据考试成绩输出对应的礼物, * 90分以上爸 ...

  6. 操作循环的关键字switch,break,return的应用及区别

    break 使用break结束循环  break可以终止循环 和 switch语句的运行; break用于结束一个循环,即跳出循环体,执行循环体之后的代码: switch 使用continue提前结束 ...

  7. I2C地址问题

    #define     MAX_17040_BATTERY_I2C_ADDR        (0x36) 设备地址 #define     MAX_17040_BATTERY_WRITE_ADDR   ...

  8. Can’t connect to local MySQL server through socket 原因解析

    在连接mysql的时,经常会出现以下错误提示: ERROR (HY000): Can't connect to local MySQL server through socket '/var/lib/ ...

  9. 二十一、当锚点遇到fixed(margin和padding)

    当锚点点击跳转的时候,如果上方有fixed,锚点跳转会默认跳转到top为0的地方,有一部分就被遮挡了 解决方法:(像素值随便给的) 给锚点跳转到的具体内容加padding-top:-50px:marg ...

  10. H5 57-文章界面

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...