java设计模式-备忘录模式

什么叫备忘录模式:
备忘录模式允许我们保存一个时间点上的数据,在出现误操作或者系统出错,我们可以恢复我们保存的那个点上的数据。

开发中常见的场景:
1.事务操作
2.redis的持久化

备忘录模式例子:
这里,我们实现的是注册学生信息,当然是我们先定义一个学生类

package com.javademo.pattern.memento;

public class Student {

    private String name ;
    private int age ;

    /**
     * 数据保存,备忘
     * @return
     */
    public StudentMemento memento(){
        StudentMemento sm = new StudentMemento();
        sm.setName(this.name);
        sm.setAge(this.age);
        return sm ;
    }


    /**
     * 数据恢复
     * @param sm 备忘的消息实体,属性基本和student一致,便于拷贝
     */
    public void recovery(StudentMemento sm){ 

        this.name = sm.getName();
        this.age = sm.getAge();

    }


    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        System.out.println("name = " + name + " age = " + age);
        return super.toString();
    }



    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

}

再来实现我们的备忘实体类

/**
 * 备忘录实体类
 * @author liuxg
 * @date 2016年5月28日 下午7:19:56
 */
public class StudentMemento {

    private String name ;
    private int age ;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

}

备忘录,需要是一个上下文类用来保存备忘实体类

/**
 * 保存备忘实体类
 * @author liuxg
 * @date 2016年5月28日 下午7:21:25
 */
public class Takecare {

    private StudentMemento studentMemento ; //可以是多个切片时间的备忘实体,用list容器

    public StudentMemento getStudentMemento() {
        return studentMemento;
    }

    public void setStudentMemento(StudentMemento studentMemento) {
        this.studentMemento = studentMemento;
    }

}

客户端进行测试

public class Client {


    public static void main(String[] args) {

        Takecare takecare = new Takecare();

        Student student = new Student("liuxg", 20);

        takecare.setStudentMemento(student.memento());//进行备忘

        student.setAge(23); //操作

        student.recovery(takecare.getStudentMemento()); //进行恢复

        student.toString();
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值