Memento模式(存档点模式)-创新互联

模式简介

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元起,快前往官网查看详情吧

本文名称:Memento模式(存档点模式)-创新互联
本文来源:https://www.cdcxhl.com/article10/dpejgo.html

成都网站建设公司_创新互联,为您提供网站策划微信小程序网站导航商城网站品牌网站建设自适应网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都定制网站建设