备忘录模式

作者: 程序员丶星霖 | 来源:发表于2017-05-18 08:05 被阅读48次

    备忘录模式

    定义

    备忘录模式提供了一种弥补现实世界缺陷的方法,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。

    英文定义:Without violating encapsulation , capture and externalize an object's internal state so that the object can be restored to this state later .

    备忘录模式的UML类图如下所示:

    备忘录模式.jpg

    上图中涉及到的角色和职责如下:

    • 发起人(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());
        }
    }
    

    使用场景

    • 需要保存和恢复数据的相关状态场景。
    • 提供一个可回滚的操作。
    • 需要监控的副本场景中。
    • 数据库连接的事务管理就是用的备忘录模式。

    欢迎大家关注我的微信公众号

    我的微信公众号.jpg

    相关文章

      网友评论

        本文标题:备忘录模式

        本文链接:https://www.haomeiwen.com/subject/tshgtxtx.html