C# 实现简单的备忘录模式

简介: 备忘录模式在不破坏封装性的前提下,捕获并保存对象的内部状态,以便后续恢复。通过原发器创建备忘录,管理者存储备忘录,可实现状态回滚。

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
// 备忘录类:存储状态
public class Memento
{
public string State { get; }
public Memento(string state) => State = state;
}

// 原发器类:创建和恢复备忘录
public class Originator
{
public string State { get; set; }
public Memento CreateMemento() => new Memento(State);
public void RestoreMemento(Memento memento) => State = memento.State;
}

// 管理者类:管理备忘录
public class Caretaker
{
public Memento Memento { get; set; }
}

// 调用示例
public static void TestMemento()
{
var originator = new Originator { State = "状态1" };
var caretaker = new Caretaker { Memento = originator.CreateMemento() };

originator.State = "状态2";
Console.WriteLine("当前状态: " + originator.State); // 状态2

originator.RestoreMemento(caretaker.Memento);
Console.WriteLine("恢复后状态: " + originator.State); // 状态1

}

相关文章
|
5月前
|
C#
C# 条件判断:if-else 与 switch 的实用场景
条件判断是流程控制的核心。if-else适用于多级条件判断,如根据积分决定会员等级;switch适用于多值匹配,C# 7.0+支持字符串和数值匹配,可清晰处理会员等级对应的优惠策略。
|
5月前
|
C#
C# 实现简单的 Excel 数据写入工具
基于EPPlus库实现C#将数据写入Excel文件,支持自定义表头与多行数据,自动调整列宽,操作简便,适用于非商业场景的数据导出需求。
|
5月前
|
C#
C# 异常处理:try-catch-finally 避免程序崩溃
异常处理用于捕获运行时错误(如空引用、文件不存在),确保程序稳定。通过 `try` 包裹可能出错的代码,`catch` 捕获并处理异常,`finally` 确保资源释放等操作始终执行,提升代码健壮性。
|
5月前
|
安全 C#
C# 实现简单的单例模式(懒汉式)
单例模式确保一个类仅存在一个实例,并提供全局访问点。通过私有构造函数防止外部实例化,结合静态属性和延迟初始化实现线程安全的唯一实例,常用于日志、配置管理等场景。
|
5月前
|
设计模式 算法 C#
C# 实现简单的观察者模式
简介:本文介绍了C#中三种常用设计模式的实现:观察者模式用于解耦主题与观察者,策略模式封装可互换的算法族,工厂模式则隐藏对象创建细节,提升代码可维护性与扩展性。
|
5月前
|
C# 数据库 Windows
C# WinForms数据绑定详解(手把手教你将数据源绑定到WinForms控件)
本教程带你快速掌握C# WinForms数据绑定,通过定义员工模型并绑定到ListBox和DataGridView,实现数据自动展示。介绍DataSource、DisplayMember及BindingSource的使用,帮助新手减少重复代码,提升开发效率,是WinForms入门必备技能。(238字)
|
5月前
|
C#
C# 随机数生成:Random 类用法
Random类用于生成伪随机数,适用于游戏、验证码、测试等场景。通过静态实例避免重复创建,确保随机性。提供整数、小数、布尔值及指定长度的随机字符串生成方法,使用简便且高效。注意需复用实例防止种子重复导致随机数相同。
|
5月前
|
存储 算法 C#
C# 哈希值计算:MD5/SHA256 加密
本示例展示了C#中使用MD5和SHA256算法生成哈希值的方法,适用于密码加密与数据校验。MD5安全性较低,建议仅用于非敏感场景;密码存储推荐使用SHA256配合盐值以增强安全性。
|
5月前
|
JSON C# 数据格式
C# 实现简单的 HTTP 请求工具(POST 补充)
该代码实现了一个基于 HttpClient 的异步 HTTP POST 请求工具类,支持以 JSON 格式提交数据并反序列化响应结果,具备异常处理机制,适用于 .NET 环境下的轻量级网络请求操作。
|
5月前
|
算法 C#
C# 实现字符串相似度计算(Levenshtein 算法)
介绍计算字符串编辑距离的算法,基于Levenshtein距离实现相似度分析,适用于搜索建议与拼写纠错,附C#代码示例。