Memento模式用于記錄存檔點(diǎn),然后可以通過加載存檔點(diǎn)回溯到指定的存檔或狀態(tài)。
成都創(chuàng)新互聯(lián)公司專業(yè)提供電信機(jī)房托管服務(wù),為用戶提供五星數(shù)據(jù)中心、電信、雙線接入解決方案,用戶可自行在線購買電信機(jī)房托管服務(wù),并享受7*24小時(shí)金牌售后服務(wù)。模式UML圖代碼示例(C#)提示:文本內(nèi)容存儲(chǔ)在.txt文件中,所以v_textPath常量記錄的是你的.txt文件路徑;文本操作命令存儲(chǔ)在.json文件中,所以v_paramsPath常量記錄的是你的.json文件路徑;你需要將二者更換為你所運(yùn)行本機(jī)的相應(yīng)文件路徑;由于該模式代碼與Iterator模式和Command模式代碼存在聯(lián)動(dòng),故無法單獨(dú)運(yùn)行,若需要運(yùn)行,請(qǐng)自行復(fù)制本欄目下Iterator模式和Command模式的示例代碼,或者從本欄目的資源篇“設(shè)計(jì)模式代碼示例合集”下載所有完整代碼資源。
using System.IO;
using System.Text.Json;
namespace Test1
{
//文本和文本操作命令的存儲(chǔ)與加載功能的具體實(shí)現(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);
}
}
//實(shí)現(xiàn)文本和文本操作命令存儲(chǔ)與加載的接口
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);
}
}
代碼解說結(jié)合Command模式,我們對(duì)一個(gè)文本編輯器進(jìn)行了簡(jiǎn)單的模擬,我們可以添加、刪除、復(fù)制文本,同時(shí)還可以存儲(chǔ)和加載命令狀態(tài)。這個(gè)命令狀態(tài)存儲(chǔ)比較特殊,存儲(chǔ)數(shù)據(jù)會(huì)覆蓋當(dāng)前的命令及其狀態(tài),這說明我們既保存了文本也保存了對(duì)文本的操作命令,當(dāng)我們重新加載后文本和當(dāng)時(shí)相關(guān)的操作命令都會(huì)一起恢復(fù)。文本則是以.txt文件進(jìn)行保存的,而文本操作命令則是以.json文件進(jìn)行保存的。
如果這篇文章對(duì)你有幫助,請(qǐng)給作者點(diǎn)個(gè)贊吧!
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
本文名稱:Memento模式(存檔點(diǎn)模式)-創(chuàng)新互聯(lián)
本文來源:http://jinyejixie.com/article10/dpejgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、微信小程序、網(wǎng)站導(dǎo)航、商城網(wǎng)站、品牌網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容