当前位置: 首页 > news >正文

建设厅网站关于建筑资质合并怎么查网站有没有做底部导航

建设厅网站关于建筑资质合并,怎么查网站有没有做底部导航,网站建设与管理题,台州关键词优化哪家好什么是备忘录(Memento)设计模式? 备忘录(Memento)设计模式是一种行为型设计模式,用于捕获一个对象的内部状态,并在对象之外保存这个状态,以便在需要时恢复对象到先前的状态。这种模…

什么是备忘录(Memento)设计模式?

备忘录(Memento)设计模式是一种行为型设计模式,用于捕获一个对象的内部状态,并在对象之外保存这个状态,以便在需要时恢复对象到先前的状态。这种模式允许将对象状态的保存和恢复功能封装在备忘录对象中,同时不破坏对象的封装性。

在这里插入图片描述

主要角色

  1. 发起人(Originator): 这个角色创建一个包含其当前状态的备忘录,并可以使用备忘录恢复其状态。发起人可以在备忘录中存储和恢复状态。

  2. 备忘录(Memento): 这个角色存储了发起人的内部状态。备忘录对象可以包含发起人的状态快照,但不会暴露给其他对象。

  3. 管理者(Caretaker): 这个角色负责保存备忘录。它可能会保存多个备忘录,但不对备忘录的内容进行操作。

工作流程

  1. 发起人创建备忘录: 当发起人需要保存其状态时,创建一个备忘录,并将其内部状态保存到备忘录中。

  2. 发起人恢复状态: 如果需要恢复到之前的状态,发起人可以使用备忘录中保存的状态信息进行恢复。

优点:

  1. 封装性良好: 备忘录模式允许将对象状态的保存和恢复功能封装在备忘录对象中,不暴露给其他对象,从而保持了对象状态的封装性。

  2. 历史记录管理: 允许在不破坏对象封装性的情况下,保存对象状态的历史记录,方便实现撤销、恢复、回滚等功能。

  3. 支持撤销和恢复: 备忘录模式能够保存对象不同时间点的状态,支持对对象状态的撤销操作,使得系统更具有交互性和灵活性。

缺点:

  1. 资源消耗: 如果对象状态非常庞大或者备忘录对象的管理复杂,可能会消耗大量内存和计算资源,对系统性能产生影响。

  2. 状态管理复杂性: 当需要管理大量状态或者状态之间存在复杂的依赖关系时,备忘录模式可能会增加系统的复杂性和维护成本。

  3. 备忘录对象的访问限制: 在某些情况下,备忘录对象的状态可能需要在发起人之外的对象中使用,但备忘录模式通常会限制了状态的访问性。

总的来说,备忘录模式可以有效地保存对象状态,支持撤销和恢复操作,但在状态管理复杂、资源消耗和访问限制方面可能存在一些缺点。因此,在使用备忘录模式时需要权衡其优缺点,并根据实际情况进行合理的选择和应用。


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_to_memento(self):return Memento(self._state)def restore_from_memento(self, memento):self._state = memento.get_state()# 管理者类
class Caretaker:def __init__(self):self._memento = Nonedef get_memento(self):return self._mementodef set_memento(self, memento):self._memento = memento# 客户端代码
if __name__ == "__main__":originator = Originator()caretaker = Caretaker()# 设置状态并保存到备忘录originator.set_state("State #1")caretaker.set_memento(originator.save_to_memento())# 修改状态originator.set_state("State #2")# 恢复状态originator.restore_from_memento(caretaker.get_memento())

这个示例展示了如何使用备忘录模式保存和恢复发起人对象的状态。发起人可以创建备忘录并将其状态保存到备忘录中,在需要时可以恢复到先前保存的状态。


Python 备忘录设计模式示例代码(二):

假设我们有一个电子邮件编辑器,在用户编辑邮件时需要实现撤销(Undo)功能,可以使用备忘录模式来保存不同编辑状态,以便用户可以撤销到先前的状态。

# 备忘录类
class EmailMemento:def __init__(self, content):self._content = contentdef get_content(self):return self._content# 发起人类
class EmailEditor:def __init__(self):self._content = ""def set_content(self, content):self._content = contentdef create_memento(self):return EmailMemento(self._content)def restore_from_memento(self, memento):self._content = memento.get_content()# 管理者类
class HistoryManager:def __init__(self):self._history = []def add_to_history(self, memento):self._history.append(memento)def get_last_memento(self):if self._history:return self._history.pop()# 客户端代码
if __name__ == "__main__":editor = EmailEditor()history = HistoryManager()# 编辑邮件内容并保存状态editor.set_content("First draft of the email.")history.add_to_history(editor.create_memento())# 编辑邮件内容editor.set_content("Second draft with more details.")# 恢复到先前的状态last_memento = history.get_last_memento()if last_memento:editor.restore_from_memento(last_memento)print(f"Restored to previous draft: {editor._content}")else:print("No more history to restore.")

这个示例模拟了一个简单的电子邮件编辑器。用户可以编辑邮件内容,并使用备忘录模式保存不同版本的邮件状态。通过管理者类,用户可以撤销到先前保存的状态,恢复邮件内容到之前的版本。


使用备忘录设计模式时,需要注意哪些地方?

使用备忘录设计模式时需要注意以下几个方面:

  1. 状态的复杂性: 考虑对象状态的复杂性和大小。如果状态非常庞大或者包含敏感信息,可能会导致备忘录对象的创建和管理变得复杂。在这种情况下,需要权衡保存状态的合适性和开销。

  2. 备忘录的生命周期: 确保备忘录的生命周期符合需求。备忘录应该在合适的时间创建和使用,以及在不需要时进行销毁,避免占用过多的资源。

  3. 封装性和隐私性: 保持备忘录的封装性和隐私性。确保备忘录对象的状态只有发起人可以访问和修改,其他对象不能直接操作备忘录对象的状态。

  4. 管理者的责任: 管理者(Caretaker)对于维护备忘录的历史记录和状态的正确恢复至关重要。管理者应该准确地管理备忘录的存储和恢复过程。

  5. 备忘录的可变性: 在某些情况下,备忘录对象的状态可能会发生变化。考虑到备忘录对象可能需要支持状态更新的情况,以便在恢复时能够正确地反映最新状态。

  6. 性能考虑: 对于大型状态或者频繁的状态保存操作,需要考虑备忘录模式对性能的影响,以及如何优化备忘录对象的创建和管理。

综上所述,使用备忘录模式时,需要关注状态的复杂性和大小、备忘录对象的封装性、生命周期管理以及对历史记录的正确恢复等方面,以确保备忘录模式的正确实现和使用。


本文就到这里了,感谢您的阅读 。别忘了点赞、收藏~ Thanks♪(・ω・)ノ 🍇

http://www.yayakq.cn/news/202194/

相关文章:

  • 做营销型网站需要注意哪些点wordpress免费模版
  • 温州外贸网站建设微信小程序怎么做自己的店铺
  • 网站开发 界面互联网营销师证书怎么考多少钱
  • 带论坛的网站模板下载地址自己怎样免费建设网站
  • 阿里百川 网站开发网站找谁备案
  • 单网页网站wordpress仿微信主题
  • 企业网站国内现状设计网站需提供什么
  • 建立充电站需要多少钱做网站推广怎么说广告词
  • 万户网络的网站安全吗电子商务网站建设参考书
  • 杭州网站建设书生商友网站权重6了该则么做优化方案
  • 免费申请的网站wordpress如何集成小工具功能
  • 永安市建设局网站网站管理助手哪个好用
  • 受雇去建设网站类网站招聘网站开发费用
  • 做网站宁波抖音推广平台有哪些
  • cms下载官方网站织梦cms做好的网站怎样上传到服务器
  • 语言免费网站建设合肥市门窗工程在哪个网站接活做
  • 大连做网站建设吴江区建设工程招标网站
  • 淘宝客网站域名备案吗瑞昌市环保局网站建设
  • 珠海新盈科技网站建设phpok企业建站系统
  • 永州祁阳网站建设南阳最新通知今天
  • 12306的网站是哪个公司做的信息系统项目管理师
  • 徐州网站建设报价域名代备案平台
  • wordpress网站代码优化深圳网站建设三把火科技
  • 烟台软件优化网站网站推广公司 wordpress
  • 网站推广是什么岗位深圳建站公司设计深业集团
  • 公司网站开发计划书wordpress下载主题需要ftp
  • 重庆建设教育培训管理系统网站王也是谁
  • 网站seo流程简单的网站开发流程图
  • 赣州市建设考勤网站动漫设计与制作专业学校
  • 成都网站网络建设四网合一的网站