c#设计模式-备忘录模式-备忘录对象值被改变

问题描述

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespacetest3{classChess{privateint[,]a=newint[10,10];publicChess(){for(inti=0;i<10;i++){for(intj=0;j<10;j++)a[i,j]=0;}}publicvoidsetChess(intx,inty){a[x-1,y-1]=1;}publicvoidShow(){for(inti=0;i<10;i++){for(intj=0;j<10;j++){if(a[i,j]==1)Console.Write("X");elseConsole.Write("O");}Console.WriteLine();}}}classOriginator{privateintx,y;privateChesschess1=newChess();publicvoidOsetChess(){chess1.setChess(x,y);}publicintX{get{returnx;}set{x=value;}}publicintY{get{returny;}set{y=value;}}publicMementoCreateMemento(){return(newMemento(x,y,chess1));}publicvoidSetMemento(Mementomemento){x=memento.X;y=memento.Y;chess1=memento.Chess;}publicvoidShow(){Console.WriteLine("X="+x);Console.WriteLine("Y="+y);chess1.Show();}}classMemento{privateintx,y;privateChesschess2=newChess();publicMemento(intx,inty,Chesschess){this.x=x;this.y=y;this.chess2=chess;}publicChessChess{get{returnchess2;}set{chess2=value;}}publicintX{get{returnx;}set{x=value;}}publicintY{get{returny;}set{y=value;}}}classCaretaker{privateMementomemento;publicMementoMemento{get{returnmemento;}set{memento=value;}}}classProgram{staticvoidMain(string[]args){Originatora=newOriginator();a.X=2;a.Y=3;a.OsetChess();Console.WriteLine("a选手下棋前");a.Show();Caretakerc=newCaretaker();c.Memento=a.CreateMemento();a.X=3;a.Y=4;c.Memento.Chess.Show();a.OsetChess();c.Memento.Chess.Show();Console.WriteLine("a选手下棋后");a.Show();a.SetMemento(c.Memento);Console.WriteLine("a选手选择悔棋");Console.WriteLine("a选手悔棋成功");a.Show();Console.ReadKey();}}}

解决方案

时间: 2024-10-29 08:49:17

c#设计模式-备忘录模式-备忘录对象值被改变的相关文章

c#设计模式-备忘录模式-备忘录对象被改变

问题描述 usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;namespacetest3{classChess{privateint[,]a=newint[10,10];publicChess(){for(inti=0;i<10;i++){for(intj=0;j<10;j++)a[i,j]=0;}}publicvoidsetChes

设计模式中的备忘录模式解析及相关C++实例应用_C 语言

备忘录模式旨在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态.在命令模式中,备忘录模式经常还经常被用来维护可以撤销(Undo)操作的状态. 类图: Originator:负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态.Originator可根据需要决定Memento存储Originator的哪些内部状态. Memento:负责存储Originator对象的内部状态,并可防止Origin

详解Java设计模式之备忘录模式的使用_java

定义与结构     备忘录(Memento)模式又称标记(Token)模式.GOF给备忘录模式的定义为:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 在讲命令模式的时候,我们曾经提到利用中间的命令角色可以实现undo.redo的功能.从定义可以看出备忘录模式是专门来存放对象历史状态的,这对于很好的实现undo.redo功能有很大的帮助.所以在命令模式中undo.redo功能可以配合备忘录模式来实现. 其实单就实现保存一个对

21、Python与设计模式--备忘录模式

一.游戏进度保存 打过游戏的朋友一定知道,大多数游戏都有保存进度的功能,如果一局游戏下来,忘保存了进度,那么下次只能从上次进度点开始重新打了.一般情况下,保存进度是要存在可持久化存储器上,本例中先以保存在内存中来模拟实现该场景的情形.以模拟一个战斗角色为例.首先,创建游戏角色. class GameCharacter(): vitality = 0 attack = 0 defense = 0 def displayState(self): print 'Current Values:' pri

设计模式:备忘录模式(Memento)

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将对象恢复到原先保存的状态. 备忘录模式的角色: 1. 原发器(Originator):负责创建一个备忘录,用以记录当前对象的内部状态,通过也可以使用它来利用备忘录回复内部状态.同时原发器还可以根据需要决定Memento存储Originator的那些内部状态. 2. 备忘录(Memento):用于存储Originator的内部状态,并且可以防止Originator以外的对象访问Memento.在备忘录Meme

IOS设计模式-备忘录模式

内容大纲 如何存储记录 备忘录模式的基本原理 使用备忘录模式 优化存储方案 恢复UIView的状态 1.如何存储记录 在存储记录时,第一步我们需要用一把钥匙去打开一把锁.第二步,当我们打开锁之后就会有黑盒子,我们一开始还不知道里面有什么,所以是黑盒子. 1.存储记录的必要性 生活中,比如去超市购物有时候就需要在入口储物柜存放自己的包裹 2.记录的唯一标示 储物柜对应一把钥匙和号码标示. 3.存储记录与取出记录 ===========================================

详解备忘录模式及其在Java设计模式编程中的实现_java

1. 定义在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 2. 使用的原因想要恢复对象某时的原有状态. 3. 适用的情况举例有很多备忘录模式的应用,只是我们已经见过,却没细想这是备忘录模式的使用罢了,略略举几例: eg1. 备忘录在jsp+javabean的使用: 在一系统中新增帐户时,在表单中需要填写用户名.密码.联系电话.地址等信息,如果有些字段没有填写或填写错误,当用户点击"提交"按钮时,需要在新增页面上保存

Java设计模式(十九)----备忘录模式

备忘录模式 一. 概念 二. 结构 三. 分类 1."白箱"备忘录模式的实现 2."黑箱"备忘录模式的实现 3."多重"检查点 4."自述历史"模式 引子 我们在编程的时候,经常需要保存对象的中间状态,当需要的时候,可以恢复到这个状 态.比如,我们使用Eclipse进行编程时,假如编写失误(例如不小心误删除了几行代码),我们希望返回删除前的状态,便可以使用Ctrl+Z来进行返 回.下象棋的时候,可以反悔.这时我们便可以使用备忘

乐在其中设计模式(C#) - 备忘录模式(Memento Pattern)

原文:乐在其中设计模式(C#) - 备忘录模式(Memento Pattern)[索引页][源码下载] 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) 作者:webabcd 介绍 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到保存的状态. 示例 有一个Message实体类,某个对象对它的操作有Insert()方法,只有在插入时间符合要求的情况下才能插入成功,因此要求可以保存和恢复Message对象的状态,插入失败