• 备忘录模式


    备忘录模式的定义

    备忘录模式(Memento Pattern)提供了一种弥补真实世界缺陷的方法,让“后悔药”在程

    序的世界中真实可行,其定义如下:

    Without violating encapsulation,capture and externalize an object's internal state so that the

    object can be restored to this state later.(在不破坏封装性的前提下,捕获一个对象的内部状

    态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。)

    通俗地说,备忘录模式就是一个对象的备份模式,提供了一种程序数据的备份方法

    ● Originator发起人角色

    记录当前时刻的内部状态,负责定义哪些属于备份范围的状态,负责创建和恢复备忘录

    数据。

    ● Memento备忘录角色

    负责存储Originator发起人对象的内部状态,在需要的时候提供发起人需要的内部状态。

    ● Caretaker备忘录管理员角色

    对备忘录进行管理、保存和提供备忘录。

    发起人角色

    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(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());

         }

    }

    备忘录模式的使用场景

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

    ● 提供一个可回滚(rollback)的操作;比如Word中的CTRL+Z组合键,IE浏览器中的后

    退按钮,文件管理器上的backspace键等。

    ● 需要监控的副本场景中。

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

    备忘录模式的注意事项

    ● 备忘录的生命期

    备忘录创建出来就要在“最近”的代码中使用,要主动管理它的生命周期,建立就要使

    用,不使用就要立刻删除其引用,等待垃圾回收器对它的回收处理。

    ● 备忘录的性能

    不要在频繁建立备份的场景中使用备忘录模式(比如一个for循环中),原因有二:一是

    控制不了备忘录建立的对象数量;二是大对象的建立是要消耗资源的,系统的性能需要考

    虑。

  • 相关阅读:
    基于比较的算法之五:堆排序
    顺序统计:寻找序列中第k小的数
    顺序统计:寻找序列中的最大最小数
    非基于比较的排序算法之一:计数排序
    基于比较的算法之四:快速排序
    基于比较的算法之三:插入排序
    基于比较的算法之二:选择排序
    基于比较的算法之一:冒泡排序
    轮廓问题/Outline Problem-->改进的算法及时间复杂度分析
    寻找最大连续子序列/Find the max contiguous subsequence
  • 原文地址:https://www.cnblogs.com/future-zmy/p/6298539.html
Copyright © 2020-2023  润新知