重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Memento模式用于记录存档点,然后可以通过加载存档点回溯到指定的存档或状态。
成都创新互联公司专业提供电信机房托管服务,为用户提供五星数据中心、电信、双线接入解决方案,用户可自行在线购买电信机房托管服务,并享受7*24小时金牌售后服务。模式UML图代码示例(C#)提示:文本内容存储在.txt文件中,所以v_textPath常量记录的是你的.txt文件路径;文本操作命令存储在.json文件中,所以v_paramsPath常量记录的是你的.json文件路径;你需要将二者更换为你所运行本机的相应文件路径;由于该模式代码与Iterator模式和Command模式代码存在联动,故无法单独运行,若需要运行,请自行复制本栏目下Iterator模式和Command模式的示例代码,或者从本栏目的资源篇“设计模式代码示例合集”下载所有完整代码资源。
using System.IO;
using System.Text.Json;
namespace Test1
{
//文本和文本操作命令的存储与加载功能的具体实现类
public class CommandChainManager : IMemento
{
private const string v_textPath = @"D:\Study\StudyNotes\Gamemade notes\ProgramPractice\Test1\源文件\Datas\data.txt";
private const string v_paramsPath = @"D:\Study\StudyNotes\Gamemade notes\ProgramPractice\Test1\源文件\Datas\params.json";
public void LoadCommand(ref CommandChain p_commandChain)
{
string v_jsonStr = "";
using (StreamReader sr = File.OpenText(v_paramsPath))
{
v_jsonStr = sr.ReadToEnd();
}
var options = new JsonSerializerOptions
{
IncludeFields = true
};
CSFParameter[][] parameters = JsonSerializer.Deserialize(v_jsonStr, options);
p_commandChain.parameters.Clear();
foreach (CSFParameter[] param in parameters)
{
p_commandChain.parameters.Add(param);
}
}
public void LoadText(ref string p_text)
{
using (StreamReader sr = File.OpenText(v_textPath))
{
p_text = sr.ReadToEnd();
}
}
public void SaveCommands(CommandChain p_commandChain)
{
var options = new JsonSerializerOptions
{
IncludeFields = true
};
string v_jsonStr = JsonSerializer.Serialize(p_commandChain.parameters.ToArray(), options);
File.WriteAllText(v_paramsPath, v_jsonStr);
}
public void SaveText(string p_text)
{
File.WriteAllText(v_textPath, p_text);
}
}
//实现文本和文本操作命令存储与加载的接口
public interface IMemento
{
public void SaveText(string p_text);
public void LoadText(ref string p_text);
public void SaveCommands(CommandChain p_commandChain);
public void LoadCommand(ref CommandChain p_commandChain);
}
}
代码解说结合Command模式,我们对一个文本编辑器进行了简单的模拟,我们可以添加、删除、复制文本,同时还可以存储和加载命令状态。这个命令状态存储比较特殊,存储数据会覆盖当前的命令及其状态,这说明我们既保存了文本也保存了对文本的操作命令,当我们重新加载后文本和当时相关的操作命令都会一起恢复。文本则是以.txt文件进行保存的,而文本操作命令则是以.json文件进行保存的。
如果这篇文章对你有帮助,请给作者点个赞吧!
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧