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

}

相关文章
|
2天前
|
安全 C#
C# 实现简单的单例模式(懒汉式)
单例模式确保一个类仅存在一个实例,并提供全局访问点。通过私有构造函数防止外部实例化,结合静态属性和延迟初始化实现线程安全的唯一实例,常用于日志、配置管理等场景。
|
2天前
|
设计模式 算法 C#
C# 实现简单的观察者模式
简介:本文介绍了C#中三种常用设计模式的实现:观察者模式用于解耦主题与观察者,策略模式封装可互换的算法族,工厂模式则隐藏对象创建细节,提升代码可维护性与扩展性。
|
2天前
|
C#
C# 异常处理:try-catch-finally 避免程序崩溃
异常处理用于捕获运行时错误(如空引用、文件不存在),确保程序稳定。通过 `try` 包裹可能出错的代码,`catch` 捕获并处理异常,`finally` 确保资源释放等操作始终执行,提升代码健壮性。
|
2天前
|
C#
C# 条件判断:if-else 与 switch 的实用场景
条件判断是流程控制的核心。if-else适用于多级条件判断,如根据积分决定会员等级;switch适用于多值匹配,C# 7.0+支持字符串和数值匹配,可清晰处理会员等级对应的优惠策略。
|
2天前
|
C#
C# 实现简单的 Excel 数据写入工具
基于EPPlus库实现C#将数据写入Excel文件,支持自定义表头与多行数据,自动调整列宽,操作简便,适用于非商业场景的数据导出需求。
|
2天前
|
安全 C#
C# 泛型:实现类型安全的通用代码
泛型通过类型参数(如T)实现类型通用性,可定义不指定具体类型的类或方法,使用时再确定类型。示例中,Swap<T>方法可交换任意同类型变量,List<T>集合避免装箱拆箱,提升性能与安全。
|
2天前
|
C#
C# 字符串操作:常用方法汇总(含案例)
C# 提供丰富的字符串操作方法,如拼接、截取、替换和判断等。本文通过工具类案例演示如何高效处理字符串,提升开发效率与代码可读性。
|
2天前
|
存储 C#
C# 委托(Delegate):实现方法回调
委托是方法的类型,可引用方法并实现回调机制,常用于异步通知与事件触发。通过定义委托,可将方法作为参数传递,并在任务完成后调用多个回调函数,支持灵活的程序解耦与扩展。
|
2天前
|
存储 缓存 安全
C# 字典(Dictionary):键值对存储的高效用法
`Dictionary<TKey, TValue>` 是键唯一且支持快速查找(O(1))的键值对集合,适用于存储映射关系。可通过 `Add` 添加、`TryGetValue` 安全获取、`Remove` 删除元素,遍历使用 `foreach`,建议优先使用 `TryGetValue` 提升性能。
|
2天前
|
JSON C# 数据格式
C# JSON 序列化与反序列化:Newtonsoft.Json 用法
JSON是前后端交互常用格式,Newtonsoft.Json(Json.NET)是C#中最流行的JSON处理库。本文介绍如何使用它实现对象与JSON字符串的序列化和反序列化,并提供封装工具类及调用示例,便于在项目中快速集成与使用。

热门文章

最新文章