设计模式(十八)----- 备忘录模式(Memento)----(JAVA版)

本文深入探讨了备忘录模式在代码管理中的应用,详细解释了其核心概念、适用场景以及参与者角色。通过一个简单的样例代码演示了如何在对象状态改变时保存和恢复状态,确保了对象状态的灵活管理和高效使用。

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

     我们平时写代码,会遇到中间有个变量要保存一下,等一会还要使用,我们可以使用一个变量把它暂时的保存起来,要使用的时候,再去使用;  当我们现在是一个对象的一个时刻的状态要暂时的保存起来,以便下次我再使用的时候呢,我们其实也是可以使用备忘录模式来把这个中间状态来保存,下次我再来使用这个状态,这其实本质也就是备份---名如其功能。

备忘录模式定义:

    在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。


适用性:

1.必须保存一个对象在某一时刻的状态,这样以后需要时它才能恢复到先前的状态

2.如果一个用户接口来让其它的对象直接得到这些状态,将会暴露对象的实现细节并且破坏对象的封装性


参与者:

1.Memento

   备忘录存储原发器对象的内部状态

2.Originator

   原发器创建一个备忘录,用以记录当前时刻的内部状态

3.Caretaker

   负责保存好备忘录,不能对备忘录的内部进行操作或检查


一个简单的样例:

Memento

   要保存的内容,也就是原发器对象的内部状态

public class Memento {
  private String state;
  public Memento(String state) {
    this.state = state;
  }
  public String getState() {
    return state;
  }
  public void setState(String state) {
     this.state = state; 
  }
}

Originator

   要保存内容的对象,对它进行相应的处理,主要是createMemento()和setMemento(Memento menemto)

public class Originator {
  private String state;
  public String getState(){
    return state;
  }
  public void setState(String state){ 
    this.state = state;
  }
  public Memento createMemento(){
    return new Memento(state);
  }
  public void setMemento(Memento menemto){
    state = memento.getState();
  }
  public void showState(){
     System.out.println(state);
  }
}

Caretaker

public class Caretaker{
  private Memento memento;
  public Memento getMemento(){
    return this.memento;
  }
  public void setMemento(Memento memento){
    this.memento = memento;
  }
}

Test:

public class Test{
  public static void main(String[] args){
    Originator org = new Originator();
    org.setState("开会中");

    Caretaker ctk = new Caretaker();
    ctk.setMemento(org.createMemento());//将数据封装在Caretaker

    org.setState("睡觉中");
    org.showState();

    org.setMemento(ctk.getMemento());//将数据重新导入
    org.showState();
}

result:

睡觉中

开会中


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值