Memento模式(存檔點模式)-創(chuàng)新互聯(lián)

模式簡介

Memento模式用于記錄存檔點,然后可以通過加載存檔點回溯到指定的存檔或狀態(tài)。

成都創(chuàng)新互聯(lián)公司專業(yè)提供電信機房托管服務,為用戶提供五星數(shù)據(jù)中心、電信、雙線接入解決方案,用戶可自行在線購買電信機房托管服務,并享受7*24小時金牌售后服務。模式UML圖

代碼示例(C#)

提示:文本內容存儲在.txt文件中,所以v_textPath常量記錄的是你的.txt文件路徑;文本操作命令存儲在.json文件中,所以v_paramsPath常量記錄的是你的.json文件路徑;你需要將二者更換為你所運行本機的相應文件路徑;由于該模式代碼與Iterator模式和Command模式代碼存在聯(lián)動,故無法單獨運行,若需要運行,請自行復制本欄目下Iterator模式和Command模式的示例代碼,或者從本欄目的資源篇“設計模式代碼示例合集”下載所有完整代碼資源。

using System.IO;
using System.Text.Json;

namespace Test1
{
    //文本和文本操作命令的存儲與加載功能的具體實現(xiàn)類
    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);
        }
    }

    //實現(xiàn)文本和文本操作命令存儲與加載的接口
    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模式,我們對一個文本編輯器進行了簡單的模擬,我們可以添加、刪除、復制文本,同時還可以存儲和加載命令狀態(tài)。這個命令狀態(tài)存儲比較特殊,存儲數(shù)據(jù)會覆蓋當前的命令及其狀態(tài),這說明我們既保存了文本也保存了對文本的操作命令,當我們重新加載后文本和當時相關的操作命令都會一起恢復。文本則是以.txt文件進行保存的,而文本操作命令則是以.json文件進行保存的。

如果這篇文章對你有幫助,請給作者點個贊吧!

你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

本文名稱:Memento模式(存檔點模式)-創(chuàng)新互聯(lián)
本文來源:http://muchs.cn/article10/dpejgo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、微信小程序網(wǎng)站導航、商城網(wǎng)站、品牌網(wǎng)站建設、自適應網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設