c# 備忘錄模式
更新時(shí)間:2012年10月29日 14:07:31 作者:
備忘錄模式:在不破壞封裝的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在這個(gè)對(duì)象之外的地方保存這個(gè)狀態(tài),這樣以后就可將該對(duì)象恢復(fù)到原來(lái)保存的狀態(tài)了
結(jié)構(gòu)圖:

Memento類:保存狀態(tài)的容器
class Memento
{
public string State { get; set; }
public Memento(string state)
{
this.State = state;
}
}
Caretaker是保存Memento類:
class Caretaker
{
public Memento Memento { get; set; }
}
Originator類就是需要保存狀態(tài)的類:
class Originator
{
public string State { get; set; }
public Memento CreateMemento()
{
return (new Memento(State));
}
public void SetMemento(Memento memento)
{
State = memento.State;
}
public void Show()
{
Console.WriteLine("State:" + State);
}
}
主函數(shù)調(diào)用:
class Program
{
static void Main(string[] args)
{
Originator o = new Originator();
o.State = "On";
o.Show();
Caretaker c = new Caretaker();
c.Memento = o.CreateMemento();
o.State = "off";
o.Show();
o.SetMemento(c.Memento);
o.Show();
Console.ReadKey();
}
}

Memento類:保存狀態(tài)的容器
復(fù)制代碼 代碼如下:
class Memento
{
public string State { get; set; }
public Memento(string state)
{
this.State = state;
}
}
Caretaker是保存Memento類:
復(fù)制代碼 代碼如下:
class Caretaker
{
public Memento Memento { get; set; }
}
Originator類就是需要保存狀態(tài)的類:
復(fù)制代碼 代碼如下:
class Originator
{
public string State { get; set; }
public Memento CreateMemento()
{
return (new Memento(State));
}
public void SetMemento(Memento memento)
{
State = memento.State;
}
public void Show()
{
Console.WriteLine("State:" + State);
}
}
主函數(shù)調(diào)用:
復(fù)制代碼 代碼如下:
class Program
{
static void Main(string[] args)
{
Originator o = new Originator();
o.State = "On";
o.Show();
Caretaker c = new Caretaker();
c.Memento = o.CreateMemento();
o.State = "off";
o.Show();
o.SetMemento(c.Memento);
o.Show();
Console.ReadKey();
}
}
相關(guān)文章
Unity Shader實(shí)現(xiàn)圖形繪制(藍(lán)天白云大海)
這篇文章主要為大家詳細(xì)介紹了Unity Shader實(shí)現(xiàn)圖形繪制,藍(lán)天白云大海,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04C#使用TimeSpan對(duì)象實(shí)現(xiàn)獲取時(shí)間間隔
TimeSpan對(duì)象代表兩個(gè)時(shí)間段的間隔或跨度,使用TimeSpan對(duì)象可以方便地獲取兩個(gè)時(shí)間段的間隔,下面我們就來(lái)看看C#使用TimeSpan對(duì)象實(shí)現(xiàn)獲取時(shí)間間隔的具體操作吧2024-01-01C# 系統(tǒng)熱鍵注冊(cè)實(shí)現(xiàn)代碼
簡(jiǎn)單點(diǎn)說(shuō)就是為程序制定快捷鍵勒。。很多軟件都帶熱鍵功能的,通過(guò)以下方式可以實(shí)現(xiàn)2個(gè)鍵或3個(gè)鍵的快捷鍵,相當(dāng)之使用,具體實(shí)現(xiàn)方法看后文吧。2009-02-02C# 關(guān)于爬取網(wǎng)站數(shù)據(jù)遇到csrf-token的分析與解決
這篇文章主要介紹了C# 關(guān)于爬取網(wǎng)站數(shù)據(jù)遇到csrf-token的分析與解決,幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下2021-01-01C#自定義事件監(jiān)聽實(shí)現(xiàn)方法
這篇文章主要介紹了C#自定義事件監(jiān)聽實(shí)現(xiàn)方法,涉及C#事件監(jiān)聽的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-08-08C#對(duì)Word文檔的創(chuàng)建、插入表格、設(shè)置樣式等操作實(shí)例
今天小編就為大家分享一篇C#對(duì)Word文檔的創(chuàng)建、插入表格、設(shè)置樣式等操作實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05