备忘录模式

来源:互联网 发布:mac qq日历 编辑:程序博客网 时间:2024/06/06 01:35

定义

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

结构与说明

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
0 0
原创粉丝点击