栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > Java

备忘录设计模式(memento)

Java 更新时间:发布时间: 百科书网 趣学号

备忘录就是用来对一个对象进行备份,然后可以恢复回去。

备忘录设计模式:保存某个对象的内部状态的拷贝,以便恢复状态。

结构:发源器类Originator,备忘录类Memento,负责人CareTaker

 

代码演示备忘录:

1.数据源对象Emp

public class Emp {
    private String ename;
    private int age;
    private double salary;

    

    public EmpMemento memento(){
        return new EmpMemento(this);
    }

    
    public void recovery(EmpMemento mmt){
        this.ename=mmt.getEname();
        this.age=mmt.getAge();
        this.salary=mmt.getSalary();
    }


    public Emp(String ename, int age, double salary) {
        this.ename = ename;
        this.age = age;
        this.salary = salary;
    }

    public Emp() {
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "ename='" + ename + ''' +
                ", age=" + age +
                ", salary=" + salary +
                '}';
    }
}

2.备忘录对象EmpMemento

public class EmpMemento {
    private String ename;
    private int age;
    private double salary;

    public EmpMemento(Emp e){
        this.ename=e.getEname();
        this.age=e.getAge();
        this.salary=e.getSalary();
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}

3.负责人对象:

public class CareTaker {
    private EmpMemento empMemento;

    
    //private List list=new ArrayList<>();

    public EmpMemento getEmpMemento() {
        return empMemento;
    }

    public void setEmpMemento(EmpMemento empMemento) {
        this.empMemento = empMemento;
    }
}

4.测试:

 public static void main(String[] args) {
        CareTaker taker=new CareTaker();

        Emp emp=new Emp("杨过",38,40000);
        System.out.println("开始:"+emp);

        //备忘一次
        taker.setEmpMemento(emp.memento());

        emp.setAge(40);
        System.out.println("改变:"+emp);

        //恢复
        emp.recovery(taker.getEmpMemento());

        System.out.println("恢复:"+emp);
    }

结果:

开始:Emp{ename='杨过', age=38, salary=40000.0}
改变:Emp{ename='杨过', age=40, salary=40000.0}
恢复:Emp{ename='杨过', age=38, salary=40000.0}

应用场景:事务回滚等。

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/293226.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号