c# 备忘录模式
结构图:
class Memento
{
public string State { get; set; }
public Memento(string state)
{
this.State = state;
}
}
class Caretaker
{
public Memento Memento { get; set; }
}
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);
}
}
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();
}
}
相关推荐
-
解析C#设计模式编程中备忘录模式的运用
一.概述 在软件开发中,有时需要保存一个对象的状态,以便于允许用户取消相关操作或者从以往的状态中恢复过来.比如一个文档版本管理系统,可以根据需要将指定文档恢复到之前保存过的任意一个状态.这时就可以通过备忘录模式来实现. 二.备忘录模式 备忘录模式可以在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态.其结构图如下: Memento用于保存Originator对象的内部状态. Originator创建Memento,并根据需要决定需要在Memento中保存那些状态,同时还能从
-
C#备忘录模式(Memento Pattern)实例教程
本文以一个简单实例讲述了C#备忘录模式(Memento Pattern)的实现方法.分享给大家供大家参考.具体实现方法如下: 简单来说,备忘录模式就是支持回退操作.假设让一个Notepad支持回退操作,如何实现呢? 首先需要一个备忘录类. public class Memento { private string _msg; public Memento(string msg) { _msg = msg; } public string GetText() { return _msg; } }
-
Java设计模式之备忘录模式_动力节点Java学院
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样就可以将该对象恢复到原先保存的状态 类型:行为类 类图: 我们在编程的时候,经常需要保存对象的中间状态,当需要的时候,可以恢复到这个状态.比如,我们使用Eclipse进行编程时,假如编写失误(例如不小心误删除了几行代码),我们希望返回删除前的状态,便可以使用Ctrl+Z来进行返回.这时我们便可以使用备忘录模式来实现. 备忘录模式的结构 发起人:记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和
-
设计模式开发中的备忘录模式在iOS应用开发中的运用实例
何为备忘录模式? 在响应某些事件时,应用程序需要保存自身的状态,比如当用户保存文档或程序退出时.例如,游戏退出之前,可能需要保存当前会话的状态,如游戏等级.敌人数量.可用武器的种类等.游戏再次打开时,玩家可以从离开的地方接着玩.很多时候,保存程序的状态真的不需要什么特别巧妙的方法.任何简单有效的方法都可以,但是同时,保存信息应该只对原始程序有意义.原始程序应该是能够解码它所保存文档中的信息的唯一实体.这就是备忘录模式应用于游戏.文字处理等程序的软件设计中的方式,这些程序需要保存当前上下文的复杂状
-
详解Objective-C设计模式编程中对备忘录模式的运用
基本理解 这个模式有三个关键角色:原发器(Originator).备忘录(Memento).看管人(caretaker).三者的基本关系是:原发器创建一个包含其状态的备忘录,并传给看管人.看管人不知道如何与备忘录交互,但会把备忘录放在一个安全之处保管好. 备忘录(Memento):在 不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将该对象回复到原先保存的状态. Originator(发起人):负责创建一个备忘录,用以记录当前时刻它的内部状态,并且可使用恢
-
C++设计模式之备忘录模式
前言 又到年底了,也静不下心来写代码了,大家都很浮躁:翻出经典的<仙剑奇侠传>玩一会:又要打大BOSS,先存一下档吧.这是我的习惯,在打大BOSS之前,都要先存一下档,要是打赢了,就再存一个档,覆盖之前的:如果打输了,就恢复之前的存档,接着重来.我想大家都是这么玩的吧.哎呀,总是打不过.好了,不玩了,但是,游戏中的那个存档行为却让我很着迷,它是如何实现的呢?带着好奇的心,去百度了一下:哦,原来如此.好吧,开始今天的总结吧--备忘录模式. 备忘录模式 在GOF的<设计模式:可复用面向对象软
-
学习php设计模式 php实现备忘录模式(Memento)
一.意图 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样可以在以后把该对象的状态恢复到之前保存的状态. 二.备忘录模式结构图 三.备忘录模式中主要角色 1.备忘录(Memento)角色: 存储发起人(Originator)对象的内部状态,而发起人根据需要决定备忘录存储发起人的哪些内部状态. 备忘录可以保护其内容不被发起人(Originator)对象之外的任何对象所读取. 2.发起人(Originator)角色: 创建一个含有当前的内部状态的备忘录对象 使用备忘录
-
详解Java设计模式之备忘录模式的使用
定义与结构 备忘录(Memento)模式又称标记(Token)模式.GOF给备忘录模式的定义为:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 在讲命令模式的时候,我们曾经提到利用中间的命令角色可以实现undo.redo的功能.从定义可以看出备忘录模式是专门来存放对象历史状态的,这对于很好的实现undo.redo功能有很大的帮助.所以在命令模式中undo.redo功能可以配合备忘录模式来实现. 其实单就实现保存一个对
-
Python设计模式编程中的备忘录模式与对象池模式示例
Memento备忘录模式 备忘录模式一个最好想象的例子:undo! 它对对象的一个状态进行了'快照', 在你需要的时候恢复原貌.做前端会有一个场景:你设计一个表单,当点击提交会对表单内容 验证,这个时候你就要对用户填写的数据复制下来,当用户填写的不正确或者格式不对等问题, 就可以使用快照数据恢复用户已经填好的,而不是让用户重新来一遍,不是嘛? python的例子 这里实现了一个事务提交的例子 import copy def Memento(obj, deep=False): # 对你要做快照的对
-
详解备忘录模式及其在Java设计模式编程中的实现
1. 定义 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 2. 使用的原因 想要恢复对象某时的原有状态. 3. 适用的情况举例 有很多备忘录模式的应用,只是我们已经见过,却没细想这是备忘录模式的使用罢了,略略举几例: eg1. 备忘录在jsp+javabean的使用: 在一系统中新增帐户时,在表单中需要填写用户名.密码.联系电话.地址等信息,如果有些字段没有填写或填写错误,当用户点击"提交"按钮时,需要在新增页面
-
JAVA设计模式之备忘录模式原理与用法详解
本文实例讲述了JAVA设计模式之备忘录模式.分享给大家供大家参考,具体如下: 备忘录模式:又叫做快照模式,指在不破坏封装性的前提下,获取到一个对象的内部状态,并在对象之外记录或保存这个状态.在有需要的时候可将该对象恢复到原先保存的状态.我们相当于把对象原始状备份保留,所以叫备忘录模式. *模式 角色对象组成: 1.发起者对象:负责创建一个备忘录来记录当前对象的内部状态,并可使用备忘录恢复内部状态. 2.备忘录对象:负责存储发起者对象的内部状态,并防止其他对象访问备忘录. 3.管理者对象:负责备忘
-
设计模式中的Memento备忘录模式的在iOS App开发中的运用
备忘录模式.顾名思义,备忘录模式的初衷就是为了返回上一个状态而设计的.从名字看起来一目了然,好吧,还是老样子,先给出定义. 备忘录(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 定义看起来搞的很专业,其实就是保存上一个状态,以便日后恢复用.好比是在玩游戏,在打大Boss之前担心第一次打不过,先存个盘,万一玩儿完了,还可以恢复状态重新PK. 下面给出类结构图. Originator(原发器):记录当前时刻的
随机推荐
- 轻量级javascript 框架Backbone使用指南
- ASP 正则表达式常用的几种方法(execute、test、replace)
- input file上传 图片预览功能实例代码
- 在Nginx服务器中配置针对TCP的负载均衡的方法
- dos常用命令列表与使用说明
- iOS关闭虚拟键盘方法汇总
- ASP.NET操作EXCEL的总结篇
- AjaxControlToolKit CalendarExtender(日历扩展控件)的使用方法
- JavaScript prototype对象的属性说明
- asp.net下通过泛解析和伪静态实现二级域名的实现方法
- 防止服务器被攻击的妙招(推荐)
- Javascript new Date().valueOf()的作用与时间戳由来详解
- HTML/XHTML模板
- Windows Powershell 变量的幕后管理
- 利用jQuery实现CheckBox全选/全不选/反选的简单代码
- Javascript中的String对象详谈
- js 自定义个性下拉选择框示例
- python+django加载静态网页模板解析
- 解决Java中的强制类型转换和二进制表示问题
- 为什么阿里要慎重使用ArrayList中的subList方法