【设计模式】如果上天给我一次从头再来的机会——备忘录模式


【前言】

      “曾经有一分真诚的爱情放在我面前,我没有珍惜,等我失去的时候才后悔莫及,人世间最痛苦的事莫过于此。你的剑在我的咽喉上割下去吧!不用再犹豫了!如果上天能够给我一个再来一次的机会,我会对那个女孩子说三个字:我爱你。如果非要在这份爱上加上一个期限,我希望是——一万年!” 这段经典的表白台词曾经风靡一时,人们对台词之中那种悔之晚矣的切肤之痛都有着难以言说的回忆。那么如何设计一次从头再来的机会呢?像文档中的撤销那样。 今天我们一起来看一看备忘录模式。


【正文】


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>



【总结】

       学习就应该是一个反复的过程, 第一次学习设计模式的时候, 看一个晕一回。 先在再翻过头来看, 设计模式也不过是把存数据的和做管理的类分开。 备忘录模式只不过是, 用一个类存上另一个类的数据。 需要的时候再把它赋值给自己。看来,在程序设计上,我们可以很轻松的给别人再来一次的机会。 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 44
    评论
评论 44
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农胖虎-java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值