首页 > 其他 > 详细

【设计模式】12.备忘录模式

时间:2020-05-08 11:05:12      阅读:48      评论:0      收藏:0      [点我收藏+]

备忘录模式

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

结构图:

技术分享图片

Originator:发起者,创建备忘录来记录内部状态,并可以利用备忘录恢复。

Caretaker:管理者,负责保存备忘录。

Memeto:备忘录,记录Originator内部状态。

例:

public class Memeto {             // 备忘录
    private String state;

    public Memeto(String state) { // 记录数据到备忘录
        this.state = state;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }
}

 

public class Caretaker {   // 管理者
    private Memeto memeto;

    public Memeto getMemeto() {     // 获取备忘录
        return memeto;
    }

    public void setMemeto(Memeto memeto) {  // 设置备忘录
        this.memeto = memeto;
    }
}

 

public class Originator {  // 发起者
    private String state;

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public Memeto createMemeto(){         // 创建备忘录
        return new Memeto(state);
    }

    public void setMemeto(Memeto memeto){  // 恢复备忘录
        this.state=memeto.getState();
    }

}

 

public class Test {
    public static void main(String[] args) {
        Originator originator = new Originator();
        originator.setState("状态1");         // 设置初始状态1
        System.out.println("初始状态:" + originator.getState());

        Caretaker caretaker = new Caretaker();
        caretaker.setMemeto(originator.createMemeto());  // 利用originator创建初始状态1的备忘录,然后由caretaker负责保存

        originator.setState("状态2");        // 更改状态
        System.out.println("更改后的状态:" + originator.getState());

        originator.setMemeto(caretaker.getMemeto());   // 恢复保存到备忘录的状态
        System.out.println("恢复初始状态后的状态:" + originator.getState());
    }
}

 

输出:

初始状态:状态1
更改后的状态:状态2
恢复初始状态后状态:状态1

 

【设计模式】12.备忘录模式

原文:https://www.cnblogs.com/jiazhongxin/p/12848995.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!