python设计模式
01、Python设计模式:单例模式
02、Python设计模式:工厂模式
03、Python设计模式:抽象工厂模式
04、Python设计模式:建造者模式
05、Python设计模式:原型模式
06、Python设计模式:装饰器模式
07、Python设计模式:代理模式
08、Python设计模式:桥接模式
09、Python设计模式:适配器模式
10、Python设计模式:组合模式
11、Python设计模式:外观模式
12、Python设计模式:享元模式
13、Python设计模式:解释器模式
14、Python设计模式:模板模式
15、Python设计模式:命令模式
16、Python设计模式:迭代器模式
17、Python设计模式:观察者模式
18、Python设计模式:备忘录模式
19、Python设计模式:仲裁者模式
20、Python设计模式:状态模式
21、Python设计模式:责任链模式
22、Python设计模式:访问者模式
本文档使用 MrDoc 发布
-
+
首页
18、Python设计模式:备忘录模式
### **哲学思想:** 备忘录模式是一种行为设计模式,它允许在不暴露对象实现细节的情况下,保存和恢复对象的内部状态。该模式的核心思想是将对象的状态保存到一个备忘录对象中,然后在需要时将状态恢复回来。 从哲学角度来看,备忘录模式与人类记忆和历史记录有着相似之处。人们可以通过记忆来保存自己的经历和状态,并在需要时恢复它们。历史记录则是保存了人类社会的经历和状态,帮助人们了解过去,预测未来,并在需要时从历史中汲取经验和教训。 在软件设计中,备忘录模式可以帮助我们实现对象的状态保存和恢复功能,从而更好地管理对象的状态。例如,在一个游戏中,我们可以使用备忘录模式来保存玩家的状态,以便在需要时恢复它们,或者在玩家离线时自动保存状态。在一个文本编辑器中,我们可以使用备忘录模式来保存文本的历史记录,以便在需要时撤销和重做操作。 总之,备忘录模式的哲学思想是,保存和恢复对象状态的能力对于软件设计来说非常重要,它可以帮助我们更好地管理对象的状态,并提高软件的可维护性和可靠性。 ### **简介:** 备忘录模式(Memento Pattern)是一种行为型设计模式,它允许在不破坏对象封装性的前提下,捕获对象的内部状态并在对象之外保存该状态,以便在需要时恢复对象的状态。该模式的核心思想是将对象状态保存到一个备忘录对象中,然后在需要时将状态恢复回来。 备忘录模式包含三个主要角色: - Originator(发起人):负责创建一个备忘录对象,并将其状态保存到备忘录对象中。 - Memento(备忘录):用于保存 Originator 对象的状态。 - Caretaker(负责人):负责存储备忘录对象,并在需要时将其返回给 Originator 对象。 备忘录模式可以帮助我们实现对象的状态保存和恢复功能,从而更好地管理对象的状态。例如,在一个游戏中,我们可以使用备忘录模式来保存玩家的状态,以便在需要时恢复它们,或者在玩家离线时自动保存状态。在一个文本编辑器中,我们可以使用备忘录模式来保存文本的历史记录,以便在需要时撤销和重做操作。 ### **优点:** 1、 使得对象状态的保存和恢复更加灵活:备忘录模式将对象状态的保存和恢复分离出来,使得这些功能更加灵活和可扩展如果需要支持更多的状态保存和恢复操作,只需要添加相应的备忘录对象即可; 2、 不破坏对象封装性:备忘录模式通过将状态保存到备忘录对象中,使得对象的状态不会被其他对象直接访问,从而保护了对象的封装性; 3、 简化了备份操作:备忘录模式使得对象的备份操作更加简单,只需要创建一个备忘录对象并将其保存即可,而不需要修改原有的对象结构或代码; 4、 支持撤销和重做操作:备忘录模式可以支持撤销和重做操作,使得用户可以回退到之前的状态或者重新执行之前的操作; 5、 可以在不同的上下文中使用:备忘录模式可以在不同的上下文中使用,比如在游戏中保存玩家状态,在文本编辑器中保存文本历史记录等等; ### **缺点:** 1、 备忘录对象的存储会消耗大量的内存空间:如果需要保存的状态非常多,备忘录对象的存储会消耗大量的内存空间,从而影响程序的性能; 2、 备忘录对象的访问权限问题:如果备忘录对象被其他对象访问,可能会导致状态泄露的问题,从而破坏对象的封装性; 3、 备忘录模式的实现比较复杂:备忘录模式的实现比较复杂,需要定义多个类和接口,并且需要注意对象状态的一致性和正确性; ### **实际应用场景:** 1、 游戏状态的保存和恢复:在游戏中,玩家可能需要保存游戏状态并在之后恢复,备忘录模式可以很好地实现这个功能; 2、 文本编辑器的撤销和重做操作:在文本编辑器中,用户可能需要撤销和重做一些操作,备忘录模式可以帮助实现这个功能; 3、 数据库事务的回滚和恢复:在数据库中,事务的回滚和恢复可以使用备忘录模式来实现; 4、 浏览器的前进和后退功能:在浏览器中,用户可以通过前进和后退按钮来切换页面,备忘录模式可以帮助实现这个功能; 5、 订单状态的保存和恢复:在电商网站中,订单状态的保存和恢复可以使用备忘录模式来实现; ### **python代码实现:** ```python # 备忘录类,用于保存对象状态 class Memento: def __init__(self, state): self._state = state def get_state(self): return self._state # 发起人类,即需要保存状态的对象 class Originator: def __init__(self): self._state = "" def set_state(self, state): self._state = state def get_state(self): return self._state # 创建备忘录对象 def create_memento(self): return Memento(self._state) # 恢复对象状态 def restore_memento(self, memento): self._state = memento.get_state() # 管理者类,用于管理备忘录对象 class Caretaker: def __init__(self): self._mementos = [] # 添加备忘录对象 def add_memento(self, memento): self._mementos.append(memento) # 获取备忘录对象 def get_memento(self, index): return self._mementos[index] # 测试代码 if __name__ == '__main__': # 创建发起人对象 originator = Originator() # 创建管理者对象 caretaker = Caretaker() # 修改发起人对象状态并保存备忘录对象 originator.set_state("State 1") memento1 = originator.create_memento() caretaker.add_memento(memento1) # 修改发起人对象状态并保存备忘录对象 originator.set_state("State 2") memento2 = originator.create_memento() caretaker.add_memento(memento2) # 恢复发起人对象状态 originator.restore_memento(caretaker.get_memento(0)) print(originator.get_state()) originator.restore_memento(caretaker.get_memento(1)) print(originator.get_state()) ``` 在上面的代码中,我们定义了三个类:备忘录类 Memento,发起人类 Originator 和管理者类 Caretaker。其中,备忘录类用于保存对象状态,发起人类用于创建备忘录对象和恢复对象状态,管理者类用于管理备忘录对象。 在测试代码中,我们首先创建了发起人对象 originator 和管理者对象 caretaker,然后修改发起人对象的状态并保存备忘录对象,最后恢复对象状态并输出。
李智
2025年3月17日 13:33
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码