• 大话设计模式Python实现-备忘录模式


    备忘录模式(Memento Pattern):不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,这样已经后就可将该对象恢复到原先保存的状态

    下面是一个备忘录模式的demo:

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 __author__ = 'Andy'
     5 """
     6 大话设计模式
     7 设计模式——备忘录模式
     8 备忘录模式(Memento Pattern):不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,这样已经后就可将该对象恢复到原先保存的状态
     9 """
    10 
    11 # 发起人类
    12 class Originator(object):
    13 
    14     def __init__(self, state):
    15         self.state = state
    16 
    17     def create_memento(self):
    18         return Memento(self.state)
    19 
    20     def set_memento(self, memento):
    21         self.state = memento.state
    22 
    23     def show(self):
    24         print "当前状态 ", self.state
    25 
    26 # 备忘录类
    27 class Memento(object):
    28 
    29     def __init__(self, state):
    30         self.state = state
    31 
    32 # 管理者类
    33 class Caretaker(object):
    34 
    35     def __init__(self,memento):
    36         self.memento = memento
    37 
    38 
    39 
    40 if __name__ == "__main__":
    41     # 初始状态
    42     originator = Originator(state='On')
    43     originator.show()
    44     # 备忘录
    45     caretaker = Caretaker(originator.create_memento())
    46     # 修改状态
    47     originator.state = 'Off'
    48     originator.show()
    49     # 复原状态
    50     originator.set_memento(caretaker.memento)
    51     originator.show()

    上面的类的设计如下图:

    Originator(发起人):负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态,Originator可根据需要决定Memento存储Originator的那些内部状态

    Memento(备忘录):负责存储Originator对象的内部状态,并可防止Originator以外的其他对象访问备忘录Memento

    Caretaker(管理者):负责保存好备忘录Memento,不能对备忘录的内容进行操作或检查


    作者:Andy
    出处:http://www.cnblogs.com/onepiece-andy/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    Python3 WebDriver操作cookie的方法
    Windows创建定时任务执行Python脚本
    Python3 自定义请求头消息headers
    为什么SQL用UPDATE语句更新时更新行数会多3行有触发器有触发器有触发器有触发器有触发器有触发器
    【C#】C#获取文件夹下的所有文件
    jQuery.ajax()调用asp.net后台方法(非常重要)
    Asp.Net+JQuery.Ajax之$.post
    c# post 接收传来的文件
    C#使用GET、POST请求获取结果,这里以一个简单的用户登陆为例。
    javascript中let和var的区别
  • 原文地址:https://www.cnblogs.com/onepiece-andy/p/python-memento-pattern.html
Copyright © 2020-2023  润新知