备忘录模式(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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。