备忘录模式-保护和恢复内部状态

Memento模式的关键就是要在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以利用该保存的状态实施恢复操作。
在这里插入图片描述
Originator(原发器):创建一个备忘录,并存储它的当前内部状态,也可以使用备忘录来恢复其内部状态。
Mementor(备忘录):存储原发器的内部状态,备忘录的设计一般可以参考原发器的设计,根据实际需要确定备忘录类中的属性。
Caretaker(负责人):负责人又称为管理者,在负责人类中可以存储一个或多个备忘录对象,它只负责存储对象,而不能修改对象,也无须知道对象的实现细节
Memento模式基本代码
原发器类

class Originator{
   private string state;
   public string State
   {
    get{return state;}
    set{state=value;}
   }
   public Mementor CreateMemento()//创建备忘录存储它当前的内部状态
   {
    return (new Menmento(state));
   }
   public void SetMementor(Memento memento)//使用备忘录恢复
   {
    state=memento.State;
   }
   public void Show()
   {
    Console.WriteLine("State="+state);
   }

备忘录类

class Memento
{
 private string state;//体现参考原发器设计
 public Memento(string state)
 {
  this.state=state;
 }
 public string State
 {
  get{return state;}
 }
}

管理者类

class Caretaker
{
 private Memento memento;
 public Memento Memento
 {
  get{return memento;}
  set{memento=value;}
 } 
}

客户端类

class Program
{
 static void Main(string[] args)
 {
  Origintor o=new Originator();
  o.state="On";
  o.Show();
  Caretaker c=new Caretaker();
  c.Mementor=o.CreateMemento();//保存备忘录
  o.State="Off";
  o.Show();
  o.SetMemento(c.Memento);
  o.Show();
  Console.Read();
 }
}

优点:

  • 使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当保持封装的边界
  • 本模式简化了发起人类。发起人类不再需要管理和保存其内部状态的一个个版本,客户端可以自行管理他们所需要的这些状态的版本。
  • 当发起人角色的状态改变的时候,有可能这个状态无效,这时候就可以使用暂时存储起来的备忘录将状态复原。

缺点:

  • 如果发起人角色的状态需要完整地存储到备忘录对象中,那么在资源消耗上面备忘录对象会很大。
  • 当管理者角色将一个备忘录存储起来的时候,管理者可能并不知道这个状态会占用多大的存储空间,从而无法提醒用户一个操作是否很大。

适用场合:

  • 如果必须保存一个对象在某一个时刻的全部或者部分状态,方便在以后需要的时候,可以把该对象恢复到先前的状态,可以使用备忘录模式。

本质:保存和恢复内部状态

备忘录模式和原型模式

  • 这两个模式可以组合使用
    • 在原发器对象(发起人对象)创建备忘录对象的时候,如果原发器对象中全部或者大部分的状态都需要保存,一个简洁的方式就是直接克隆一个原发器对象。也就是说,这个时候备忘录对象里面存放的是一个原发器对象的实例。

练习实例-象棋悔棋

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
备忘录模式是一种行为型设计模式,它允许在不破坏封装性的前提下捕获对象的内部状态,并在对象之外保存这个状态,以便在以后的某个时候将其恢复到原先的状态备忘录模式由三个主要角色组成: 1. 发起人(Originator):负责创建一个备忘录,并记录和恢复自身的内部状态。 2. 备忘录(Memento):负责存储发起人对象的内部状态。 3. 管理者(Caretaker):负责保存备忘录,并可以对其进行管理,但不知道备忘录的具体内容。 该模式的工作流程如下: 1. 发起人创建一个备忘录,将自己的状态保存在备忘录中。 2. 发起人可以根据需要在任何时候保存自己的状态。 3. 管理者将备忘录保存起来,可维护多个备忘录。 4. 在需要恢复状态的时候,可以通过管理者获取相应的备忘录,并将发起人的状态恢复到备忘录中保存的状态备忘录模式的优点是: - 发起人对象与备忘录对象分离,实现了信息的封装和隐藏。 - 备忘录对象存储了发起人对象的历史状态,可以实现撤销和恢复操作。 - 备忘录可以进行存储和管理,可进行序列化和持久化操作。 备忘录模式通常适用于以下情况: - 需要保存和恢复对象的状态,并且封装对象的状态对于其他对象来说是不可见的。 - 需要实现撤销和恢复功能。 - 需要保存和恢复部分或全部对象状态的场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值