备忘录模式

系统 1546 0

意图
在不破坏封装性的前提条件下,捕获一个对象的内部状态,然后在该对象之外保存这个状态。以后在需要的时候可以将该对象恢复到原先保存的状态。

结构
备忘录模式

1.Memento (备忘录):保存 Originator (原发器)对象的内部状态, Originator 根据需要决定保存哪些内部状态,防止自身以外的其它对象访问备忘录。备忘录实际上是由两个接口,其中 Caretaker (管理者)只能看到备忘录的窄接口,即它只能将备忘录传递给其他对象;而原发器可以看到一个宽接口,允许他访问回到原先状态所需的所有数据,理想的情况是只允许生成原发器访问本备忘录的内部状态。
2.Originator :创建一个备忘录以记录当前时刻内部状态,使用备忘录恢复内部状态。
3.Caretaker :负责保存备忘录,但不能处理其中的内容。

使用场合
需要保存对象在某一时刻的状态,并在以后需要的时候恢复到这个状态。同时又不希望暴露对象的视线细节,破坏对象的封装性,这时需要使用备忘录模式。

效果
备忘录模式在不破坏封装性的前提下,实现对对象内部状态的外部保存。但如果保存的状态过多,或者设计不合理,则将产生过多的备忘录对象而占用大量的系统资源。

using System;

namespace MyApp

{

class Program

{

static void Main()

{

GameRole gameRole = new GameRole ( "Killer007" );

gameRole.ShowState();

gameRole.HitBoss();

gameRole.HitBoss();

gameRole.Hitted();

gameRole.ShowState();

gameRole.SetMemento();

gameRole.Hitted();

gameRole.Hitted();

gameRole.Hitted();

gameRole.Hitted();

gameRole.ShowState();

gameRole.GetMemento();

gameRole.ShowState();

Console .ReadKey();

}

}

class GameRole

{

private string account;

private int blood;

private int magic;

private Memento memento;

public GameRole( string account)

{

this .account = account;

blood = 100 ;

magic = 100 ;

}

public void SetMemento()

{

this .memento = new Memento (blood, magic);

}

public void GetMemento()

{

this .blood = memento.Blood;

this .magic = memento.Magic;

}

public void HitBoss()

{

magic -= 20 ;

}

public void Hitted()

{

blood -= 20 ;

}

public void ShowState()

{

Console .WriteLine( "Account:{0}" , account);

Console .WriteLine( " Blood:{0}" , blood.ToString());

Console .WriteLine( " Magic:{0}" , magic.ToString());

Console .WriteLine();

}

}

class Memento

{

private int blood;

private int magic;

public int Blood

{

get

{

return blood;

}

}

public int Magic

{

get

{

return magic;

}

}

public Memento( int blood, int magic)

{

this .blood = blood;

this .magic = magic;

}

}

}

备忘录模式


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论