十八 设计模式之备忘录模式

定义  在不破坏封装性的前提下,捕获一个对象内部状态,并在该对象之外保存这个状态。

这样以后就 可将该对象恢复到原先保存的状态

类图

通用代码

//发起人角色

public class Originator {

      //内部状态

      private String state="init";

 

      public String getState() {

            return state;

      }

 

      public void setState(String state) {

            this.state = state;

      }

      //创建一个备忘录

      public Memento createMemento(){

            return new Memento(this.state);

      }

      //恢复一个备忘录

      public void restoreMemento(Memento _memento){

            this.setState(_memento.getState());

      }

}

//备忘录角色

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;

      }

}

 

//备忘录管理员角色

public class Caretaker {

      //备忘录对象

      private Memento memento;

      public Memento getMemento() {

            return memento;

      }

      public void setMemento(Memento memento) {

            this.memento = memento;

      }

}

public class Client {

      public static void main(String[] args) {

            //定义出发起人

            Originator originator = new Originator();

            //定义出备忘录管理员

            Caretaker caretaker =new Caretaker();

            //创建一个备忘录

            caretaker.setMemento(originator.createMemento());

            //恢复一个备忘录

            originator.restoreMemento(caretaker.getMemento());

      }

}

使用场景

1.       需要保存和恢复数据的相关状态场景

2.       提供一个可回滚操作

3.       需要监控的副本场景中

4.       数据库连接的事务管理就是用的备忘录模式

注意事项

备忘录的性能:不要在频繁建立备份的场景中使用备忘录模式以免控制不了备忘录建立的对象数量,而且大对象的简历需要资源

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值