【前言】
“曾经有一分真诚的爱情放在我面前,我没有珍惜,等我失去的时候才后悔莫及,人世间最痛苦的事莫过于此。你的剑在我的咽喉上割下去吧!不用再犹豫了!如果上天能够给我一个再来一次的机会,我会对那个女孩子说三个字:我爱你。如果非要在这份爱上加上一个期限,我希望是——一万年!” 这段经典的表白台词曾经风靡一时,人们对台词之中那种悔之晚矣的切肤之痛都有着难以言说的回忆。那么如何设计一次从头再来的机会呢?像文档中的撤销那样。 今天我们一起来看一看备忘录模式。
【正文】
UML 图:
代码:
发起人类:
<span style="font-size:24px;">//************************************************************************************
//作者: 宋荣凯
//小组:
//类名: Originator.cs
//版本号: V1.0.0.0
//创建时间:22-5月-2016 16:10:49
//描述:
//
//====================================================================================
//修改标记
//修改时间:
//修改人:
//版本号: V1.0.0.0
//描述:
//
//************************************************************************************
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
/// <summary>
/// 该类负责最终展示成果
/// </summary>
public class Originator {
private string state;
public virtual void Dispose(){
}
/// <summary>
/// 创建一个备忘录类
/// </summary>
/// <returns></returns>
public Memento CreateMemento()
{
return (new Memento(state));
}
///
/// 向备忘录中存入相应相应需要存储的属性
///
/// <param name="m" ></param>
public void SetMemento(Memento m)
{
state = m.State;
}
/// <summary>
/// 需要向备忘录存入的属性
/// </summary>
public String State
{
get
{
return state;
}
set
{
state = value;
}
}
public void Show()
{
Console.WriteLine ("State="+state );
}
}//end Originator </span>
<span style="font-size:24px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
/// <summary>
/// 备忘录类, 存储需要存储的属性信息
/// </summary>
public class Memento {
private string state;
public Memento(string state){
this.state = state;
}
~Memento(){
}
public virtual void Dispose(){
}
public string State{
get{
return state;
}
}
}//end Memento </span>
<span style="font-size:24px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
/// <summary>
/// 管理者类 , 负责得到 或设置备忘录
/// </summary>
public class Caretaker {
private Memento memento;
public Memento Memento{
get{
return memento;
}
set{
memento = value;
}
}
}//end Caretaker </span>
客户端类:
<span style="font-size:24px;"> 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.Read();</span>
【总结】
学习就应该是一个反复的过程, 第一次学习设计模式的时候, 看一个晕一回。 先在再翻过头来看, 设计模式也不过是把存数据的和做管理的类分开。 备忘录模式只不过是, 用一个类存上另一个类的数据。 需要的时候再把它赋值给自己。看来,在程序设计上,我们可以很轻松的给别人再来一次的机会。