当前位置: 首页> 财经> 股票 > 行为型设计模式-备忘录(memento)模式

行为型设计模式-备忘录(memento)模式

时间:2025/7/13 6:13:28来源:https://blog.csdn.net/linkedin_21843693/article/details/141461189 浏览次数:0次

设计模式汇总:查看

通俗示例

想象一下你正在玩一个角色扮演游戏,在游戏中你有一个角色,随着游戏的进行,角色的状态会不断变化,比如经验值、装备和生命值等。如果游戏中没有保存功能,一旦游戏意外关闭或者你想要重新尝试某个决策,你将不得不重新开始游戏。但是,如果游戏提供了保存功能,你可以随时创建一个“快照”来记录当前角色的状态,如果后续出现了不利的局面,你可以回到这个“快照”来恢复角色的状态。这里的“快照”就是备忘录模式中的备忘录对象,它帮助你保存和恢复游戏状态。

通俗解释

备忘录模式是一种行为型设计模式,它允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。备忘录模式主要包括三个角色:发起人(Originator)、备忘录(Memento)和负责人(Caretaker)。发起人对象负责创建一个备忘录对象来存储其当前状态,负责人对象则负责管理备忘录对象,包括保存和提供备忘录以便恢复状态。

备忘录模式的组成包括以下几部分:

  • 发起人(Originator):创建并在备忘录中存储状态。
  • 备忘录(Memento):存储发起人的内部状态,并且防止外部访问。
  • 负责人(Caretaker):负责保存备忘录对象,通常不关心备忘录的细节。

备忘录模式的优点

  • 保持封装性:发起人不需要暴露其内部状态细节,只需通过备忘录对象来保存和恢复状态。
  • 简化发起人角色:发起人不需要管理和维护历史状态,这些工作由备忘录和负责人来完成。
  • 灵活的状态恢复:可以恢复到任意保存的状态,提供了一种“撤销”或“重做”的操作。

Python代码示例

以下是一个备忘录模式的简单实现:

# 备忘录类
class Memento:def __init__(self, state):self._state = statedef get_state(self):return self._state# 发起人类
class Originator:def __init__(self):self._state = Nonedef set_state(self, state):self._state = statedef save_state(self):return Memento(self._state)def restore_state(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")saved_state = originator.save_state()caretaker.add_memento(saved_state)# 更改发起人状态originator.set_state("State #2")# 恢复到之前保存的状态originator.restore_state(caretaker.get_memento(0))print(f"Restored state: {originator._state}")

在这个例子中,Memento类是备忘录,它有一个方法get_state来获取保存的状态。Originator类是发起人,它有save_staterestore_state方法来保存和恢复状态。Caretaker类是负责人,负责保存备忘录对象。客户端代码演示了如何使用备忘录模式来保存和恢复对象的状态。

总结

备忘录模式通过备忘录对象来捕获和存储另一个对象的内部状态,使得这些状态可以在以后被恢复,而不必暴露对象的具体实现。这种模式在需要实现撤销操作、事务操作或者状态恢复的场景中非常有用。

关键字:行为型设计模式-备忘录(memento)模式

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: