您的位置:首页 > 编程语言 > Java开发

JAVA设计模式之备忘录模式

2016-12-18 23:37 405 查看

JAVA设计模式之备忘录模式

概念:

备忘录模式(memento),保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原先的状态。

结构

原发器类Originator:保存对象内部状态

备忘录类Memento:存储状态的拷贝

负责人类CareTake:存储备忘录

应用

棋类开发中的悔棋

普通软件的撤销

数据库软件中,事务管理的回滚操作

类图



代码

代码类图:



// 源发器类
public class Emp {
private String name;
private int age;

// 进行备忘操作,返回备忘录对象
public EmpMemento memento() {
return new EmpMemento(this);
}

// 进行数据恢复,恢复成指定备忘录的值
public void recovery(EmpMemento mmt) {
this.name = mmt.getName();
this.age = mmt.getAge();
}

public Emp(String name, int age) {
this.name = name;
this.age = 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;
}
}


// 备忘录类
public class EmpMemento {
private String name;
private int age;

public EmpMemento(Emp emp) {
this.name = emp.getName();
this.age = emp.getAge();
}

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;
}
}


// 负责人类, 负责管理备忘录
public class CareTake {
private List empMementoList = new ArrayList<>();//用stack更好,还可以序列化和持久化,存到磁盘,以防丢失

public void addMemento(EmpMemento empMemento) {
empMementoList.add(empMemento);
}

// 按顺序逐个恢复
public EmpMemento getLastMemento() {
if (empMementoList.size() <= 0) {
return null;
}
int index = empMementoList.size() - 1;
EmpMemento result = empMementoList.get(index);
empMementoList.remove(index);
return result;
}

}


public class Main {
public static void main(String[] args) {
CareTake taker = new CareTake();
Emp emp = new Emp("55", 15);

taker.addMemento(emp.memento());
System.out.println(JSON.toJSONString(emp));
emp.setAge(16);
taker.addMemento(emp.memento());
System.out.println(JSON.toJSONString(emp));
emp.setAge(17);
System.out.println(JSON.toJSONString(emp));

emp.recovery(taker.getLastMemento());
System.out.println(JSON.toJSONString(emp));

emp.recovery(taker.getLastMemento());
System.out.println(JSON.toJSONString(emp));

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java java设计模式