来说说(Memorandum)备忘录模式

本文介绍了备忘录模式的基本概念及其实现方式,通过一个简单的示例解释了如何在不破坏对象封装性的前提下,保存和恢复对象的状态。讨论了备忘录模式的应用场景和注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是备忘录模式?

根据他的名字来分析,我们就知道他是来保存一些状态的,当回滚的时候,就可以来进行返回,撤销等操作,就像我们coding的时候,写错了,要直接control + z来进行返回,当我们又不想破坏对象的原封装性,又要来存储,记录一些状态,怎么办?就像四五年前,我们做的萌三国之类的战旗一样,我们手动控制武将的移动,移动了一会我们反悔了怎么办?这样备忘录模式就能够游刃有余的给我们解决这一类的问题。
  并且他是这么定义的:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态。他大致分为,发起人,备忘录,管理角色。

2.我们以最简单的例子入手来解析

我们先来创建一个发起人,也就是故事的主角。
/// <summary>
/// 备忘录方法  单状态
/// </summary>
public class Originator  {
	private string state = "";

	public string State
	{
		set{ 
			state = value;
		}

		get{
			return state;
		}
	}

	public Memento cteateMemento(){
		return new Memento (this.State);
	}

	public void restoreMemento(Memento memento)
	{
		this.State = memento.State;
	}
}

我们来创建一个备忘录
public class Memento{
	private string state = "";

	public Memento(string states)
	{
		state = states;
	}

	public string State
	{
		set{ 
			state = value;
		}
		get{ 
			return state;
		}
	}

}
我们来创建一个角色管理类
public class Caretaker{
	private Memento memento;

	public Memento  Mementos
	{
		set{ 
			memento = value;
		}
		get{ 
			return memento;
		}
	}

}

我们来进行测试。

public class Memorandum{

	public void test()
	{
		Originator origintor = new Originator ();
		origintor.State = "状态1";
		Debug.Log ("初始化状态:" + origintor.State);

		Caretaker caretaker = new Caretaker ();
		caretaker.Mementos = origintor.cteateMemento ();
		origintor.State = "状态2";

		Debug.Log ("改变后的状态:" + origintor.State);
		origintor.restoreMemento (caretaker.Mementos);
		Debug.Log ("恢复后的状态:" + origintor.State);
	}
}

3.需要注意的是。

由于要把需要撤销的变量进行单独保存一份,所以需要增加内存的消耗,在我们使用的时候就一定要注意了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值