设计模式 |备忘录模式(memento)

定义:

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

结构:(书中图,侵删)

Originator:需要备份的类(写在便签上的内容)
Memento:备份类,里面包含部分或全部Originator的属性(便签纸)
Caretaker:真正保存备份的地方(便签纸贴的地方)

实例:

替答到。我也不知道怎么就想到了这个。上课的时候,老师点名,如果你要帮同学答到,那么你就需要先将自己的名字藏起来,换成你同学的名字,等替他答完了,你再换回自己名字。(我并没有在教坏小朋友,还请同学们乖乖自己去上课)
 
学生类:

package designpattern.memento;

public class Student {
    private String name;// 姓名
    private String major;// 专业
    private String studentNo;// 学号

    public Student(String name, String major, String studentNo) {
        super();
        this.name = name;
        this.major = major;
        this.studentNo = studentNo;
    }

    public Memento createMemento() {
        return new Memento(this.name, this.major);
    }

    public void restoreMemento(Memento memento) {
        this.name = memento.getName();
        this.major = memento.getMajor();
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    public String getStudentNo() {
        return studentNo;
    }

    public void setStudentNo(String studentNo) {
        this.studentNo = studentNo;
    }

    @Override
    public String toString() {
        return "Student [name=" + name + ", major=" + major + ", studentNo=" + studentNo + "]";
    }

}
备忘录类:

package designpattern.memento;

public class Memento {
    private String name;
    private String major;

    public Memento(String name, String major) {
        super();
        this.name = name;
        this.major = major;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

}
保存类:

package designpattern.memento;

public class CareTaker {
    private Memento memento;

    public Memento getMemento() {
        return memento;
    }

    public void setMemento(Memento memento) {
        this.memento = memento;
    }

}
客户端:

package designpattern.memento;

public class Client {
    public static void main(String[] args) {
        Student student = new Student("郝鑫仁", "计算机", "1234");
        CareTaker careTaker = new CareTaker();
        careTaker.setMemento(student.createMemento());
        System.out.println(student);

        System.out.println("开始点名...");

        // 伪装成其他同学
        student.setName("齐步莱");
        student.setMajor("自动化");
        System.out.println(student);

        System.out.println("点名结束");

        // 变回自己
        student.restoreMemento(careTaker.getMemento());
        System.out.println(student);

    }
}
结果输出:
Student [name=郝鑫仁, major=计算机, studentNo=1234]
开始点名...
Student [name=齐步莱, major=自动化, studentNo=1234]
点名结束
Student [name=郝鑫仁, major=计算机, studentNo=1234]

总结:

备忘录模式就是用于临时存储类的一部分信息,以便它能回到存储前的状态。
这个我在实际应用中暂时没有遇到相关的实例,书中说到的保存游戏进度算一个,但我自己开发中暂时还没遇到。
(0)

相关推荐

  • 设计模式之备忘录模式

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

  • PHP设计模式之备忘录模式

    PHP设计模式之备忘录模式 备忘录,这个名字其实就已经很形象的解释了它的作用.典型的例子就是我们原来玩硬盘游戏时的存档功能.当你对即将面对的大BOSS有所顾虑时,一般都会先保存一次进度存档.如果挑战失 ...

  • [PHP小课堂]PHP设计模式之备忘录模式

    [PHP小课堂]PHP设计模式之备忘录模式 关注公众号:[硬核项目经理]获取最新文章 添加微信/QQ好友:[DarkMatterZyCoder/149844827]免费得PHP.项目管理学习资料

  • 无废话设计模式(16)行为型模式--备忘录模式

    0-前言 备忘录模式定义:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态. 这样以后就可以将该对象恢复到原先保存的状态. 1-实现 备忘录模式设计的初衷是用于备份状态. 但是 ...

  • 图解Java设计模式之备忘录模式

    游戏角色状态恢复问题 传统方案解决游戏角色恢复 传统的方式的问题分析 备忘录模式基本介绍 备忘录模式原理类图 游戏角色恢复状态实例 备忘录模式的注意事项和细节 游戏角色状态恢复问题 游戏角色有攻击力和 ...

  • 设计模式-门面模式

    门面模式 参考资料 图解设计模式 大话设计模式 设计模式之禅 github我见过最好的设计模式 http://c.biancheng.net/view/1326.html 定义 也称为外观模式 外观模 ...

  • 设计模式-建造者模式

    建造者模式 也叫生成器模式,他是一个创建型模式 通用类图 Product产品类 ​通常是实现了模板方法模式,也就是有模板方法和基本方法. public class Product { public v ...

  • 设计模式-原型模式

    原型模式 ​原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,并且通过拷贝这些原型创建新的对象 ​调用者不需要知道任何创建细节,不调用构造函数 ​其属于一种创建型模式 通用类图 优点 性能 ...

  • 设计模式——策略模式

    什么是策略模式?策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化.举个例子? ...