.NET高级面试指南专题二十九【备忘录模式介绍,用于需要撤销操作或在发生错误时恢复对象状态的情况】

本文主要是介绍.NET高级面试指南专题二十九【备忘录模式介绍,用于需要撤销操作或在发生错误时恢复对象状态的情况】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

备忘录模式是一种行为型设计模式,用于捕获对象的内部状态并在不破坏其封装性的情况下将其保存,以便稍后可以将对象恢复到先前的状态。这种模式通常用于需要撤销操作或在发生错误时恢复对象状态的情况。

原理
备忘录模式包含以下几个关键角色:

  • Originator(发起人):负责创建一个备忘录对象,以记录当前时刻它的内部状态,并可以使用备忘录恢复内部状态。
  • Memento(备忘录):负责存储发起人的内部状态。备忘录可以有不同的实现,但通常包含了原发起人状态的部分或全部信息。
  • Caretaker(负责人):负责保存备忘录对象,但不能对备忘录进行操作或检查其内容。其主要作用是防止其他对象访问备忘录,确保只有发起人可以读取备忘录中的状态。

优点

  • 支持撤销操作:允许将对象恢复到之前的状态。
  • 封装性好:备忘录模式将状态信息封装在备忘录对象中,使得发起人对象不需要暴露其内部状态,从而提高了封装性和安全性。
  • 简化发起人:备忘录模式将存储状态的责任分离出来,使得发起人类的代码更加清晰简洁。

缺点

  • 资源消耗:如果需要保存大量的状态信息,会占用较多的内存资源。
  • 备忘录管理:负责人对象需要管理备忘录对象,可能会引入额外的复杂性。

C# 示例代码

using System;// 备忘录类
class Memento
{private string _state;public Memento(string state){_state = state;}public string GetState(){return _state;}
}// 发起人类
class Originator
{private string _state;public string State{get { return _state; }set{Console.WriteLine("设置状态:" + value);_state = value;}}public Memento SaveStateToMemento(){Console.WriteLine("保存状态到备忘录");return new Memento(_state);}public void GetStateFromMemento(Memento memento){_state = memento.GetState();Console.WriteLine("从备忘录恢复状态:" + _state);}
}// 负责人类
class Caretaker
{private Memento _memento;public Memento Memento{get { return _memento; }set { _memento = value; }}
}class Program
{static void Main(string[] args){Originator originator = new Originator();Caretaker caretaker = new Caretaker();originator.State = "状态1";originator.State = "状态2";caretaker.Memento = originator.SaveStateToMemento();originator.State = "状态3";originator.GetStateFromMemento(caretaker.Memento);Console.ReadKey();}
}

这篇关于.NET高级面试指南专题二十九【备忘录模式介绍,用于需要撤销操作或在发生错误时恢复对象状态的情况】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940616

相关文章

Spring Boot结成MyBatis-Plus最全配置指南

《SpringBoot结成MyBatis-Plus最全配置指南》本文主要介绍了SpringBoot结成MyBatis-Plus最全配置指南,包括依赖引入、配置数据源、Mapper扫描、基本CRUD操... 目录前言详细操作一.创建项目并引入相关依赖二.配置数据源信息三.编写相关代码查zsRArly询数据库数

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

JavaScript错误处理避坑指南

《JavaScript错误处理避坑指南》JavaScript错误处理是编程过程中不可避免的部分,它涉及到识别、捕获和响应代码运行时可能出现的问题,本文将详细给大家介绍一下JavaScript错误处理的... 目录一、错误类型:三大“杀手”与应对策略1. 语法错误(SyntaxError)2. 运行时错误(R

SpringBoot如何通过Map实现策略模式

《SpringBoot如何通过Map实现策略模式》策略模式是一种行为设计模式,它允许在运行时选择算法的行为,在Spring框架中,我们可以利用@Resource注解和Map集合来优雅地实现策略模式,这... 目录前言底层机制解析Spring的集合类型自动装配@Resource注解的行为实现原理使用直接使用M

使用Python实现网络设备配置备份与恢复

《使用Python实现网络设备配置备份与恢复》网络设备配置备份与恢复在网络安全管理中起着至关重要的作用,本文为大家介绍了如何通过Python实现网络设备配置备份与恢复,需要的可以参考下... 目录一、网络设备配置备份与恢复的概念与重要性二、网络设备配置备份与恢复的分类三、python网络设备配置备份与恢复实

Python使用date模块进行日期处理的终极指南

《Python使用date模块进行日期处理的终极指南》在处理与时间相关的数据时,Python的date模块是开发者最趁手的工具之一,本文将用通俗的语言,结合真实案例,带您掌握date模块的六大核心功能... 目录引言一、date模块的核心功能1.1 日期表示1.2 日期计算1.3 日期比较二、六大常用方法详

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

Python中ModuleNotFoundError: No module named ‘timm’的错误解决

《Python中ModuleNotFoundError:Nomodulenamed‘timm’的错误解决》本文主要介绍了Python中ModuleNotFoundError:Nomodulen... 目录一、引言二、错误原因分析三、解决办法1.安装timm模块2. 检查python环境3. 解决安装路径问题

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错