快捷搜索:

设计模式笔记(21)---备忘录模式(行为型)

Gof定义

在不破坏封装性的条件下,捕获一个工具的内部状态,并在该工具之外保存这个状态。这样今后就可以将该工具规复到本来保存的状态。

念头

在软件构建历程中,某些工具的状态在转换历程中,可能因为某种必要,要求法度榜样能够回溯到工具之前处于某个点时的状态。假如应用一些公有接口来让其他工具获得工具的状态,便会裸露工具的细节实现。若何实现工具状态的优越保存与规复?但同时又不会是以而破坏工具本身的封装性,看下面的布局图和代码。

备忘录模式布局图:

上图中Originator为原发器,也可以讲提议者,可以创建一个备忘录(CreateMemento),Memento为备忘录,认真存储原发器中的内部状态。Caretaker主要认真存贮备忘录。代码如下:

///

/// 备忘录类

///

public class Memento

{

private string _state;

public string State

{

get{return _state;}

}

public Memento(string state)

{

this._state = state;

}

}

///

/// 原发器类

///

public class Originator

{

public string State { get; set; }

public Memento CreateMemento()

{

return new Memento(State);

}

public void SetMemento(Memento memento)

{

State = memento.State;

}

}

///

/// 治理者

///

public class Caretaker

{

public Memento Memento { get; set; }

}

///

/// 客户端法度榜样

///

class Program

{

static void Main(string[] args)

{

//实例化原发器并设置状态名称

Originator o = new Originator();

o.State = "oec2003";

Console.WriteLine("设置状态名字为:" + o.State);

//实例化治理者,创建一个备忘储存在治理者中

Caretaker c = new Caretaker();

c.Memento = o.CreateMemento();

//变动了原发器的状态名称

o.State = "oec2004";

Console.WriteLine("改后的状态名字为:" + o.State);

//将备忘信息设置给原发器

o.SetMemento(c.Memento);

Console.WriteLine("原本的状态名字为:" + o.State);

}

}

您可能还会对下面的文章感兴趣: