备忘录模式

定义

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

结构与说明

Memento : 备忘录。用来存储源发器对象的内部状态
Originator : 源发器。使用备忘录保存某个时刻源发器自身的状态,也可以使用备忘录恢复内部状态
Caretaker : 备忘录管理者,负责存储备忘录对象,以及对备忘录对象的检查

实现

//定义一个备忘录的窄接口,具体实现在源发器的内部类实现
public interface Memento{
}
//源发器类
public class Originator{

 public Memento createMementor(){
     //一些业务操作
     return new MementoImpl();
 }
 //恢复源发器状态
 public void reset(Memento memento){
     MementoImpl mem = (MementoImpl)memento;
     //恢复的业务流程操作
 }
 /*
 *定义静态内部类,实现窄接口,在源发器内部,就是宽接口啦,静态static方便
 *外部使用
 */
 private static class MementoImpl implements Memento{

    //状态的一些参数
    public MementoImpl(...params values){
        //存储操作
    }   
    public returnType getState(){
        return ....;
    }
}

}


public Caretaker{
    private Memento memento = null;
    public vouid saveMemento(Memento _memento){
        this.memento = _memento;
    }
    public Memento retriveMemento(){
        return memento;
    }
}
//进行客户端调用

在进行备忘录的实现的时候,当对象数据量特别大,或者用户操作很频繁,以及备忘录数量特别大的时候,都存在很大的性能开销。毕竟,备忘录是使用缓存实现的。
建议备忘录和clone的原型模式一起使用

No Final is final
By  Xu.j.h
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值