JAVA设计模式之备忘录模式
来源:互联网 发布:欧洲人看俄罗斯 知乎 编辑:程序博客网 时间:2024/05/29 12:39
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)); }}
0 0
- 深入浅出Java设计模式之备忘录模式
- 深入浅出Java设计模式之备忘录模式
- java设计模式之备忘录模式Memento
- java设计模式之备忘录模式
- JAVA-设计模式之备忘录模式
- Java设计模式之备忘录模式
- Java设计模式之备忘录模式
- 《java设计模式》之备忘录模式
- JAVA设计模式之备忘录模式
- Java设计模式之备忘录模式
- JAVA设计模式之:备忘录模式
- java设计模式之备忘录模式
- Java设计模式之备忘录模式
- 【Java设计模式】之备忘录模式
- JAVA设计模式之备忘录模式
- java设计模式之备忘录模式
- java设计模式之备忘录模式
- Java设计模式之备忘录模式
- JavaSE总结-IO字符流总结
- maven下载速度太慢(换成阿里云的maven中央仓库)
- Verilog中生成语句(generate)的用法
- Atitit learn by need 需要的时候学与预先学习知识图谱路线图
- K-means算法JAVA代码
- JAVA设计模式之备忘录模式
- 1218对输入字节流的认识
- Java 正则表达式
- ProgrammingHive笔记--Chapter1 Introduction
- IDA命令行参数
- 1001. 害死人不偿命的(3n+1)猜想
- linux 如何查看目录的剩余空间大小?
- sqlite
- 7.用户代码的执行