目录
一 介绍
又叫做快照模式。
属于行为型模式。
定义:
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
主要角色:
1 发起人:记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。
2 备忘录:存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。
3 管理者:对备忘录进行管理,提供保存和获取备忘录的功能,但其不能对备忘录的内容进行修改。
主要优点:
1 提供了一种可以恢复状态的机制。
2 实现内部状态的封装。
缺点:
如果状态数据很大很多,那么备忘录对象会非常耗内存。
应用场景:
需要后悔药的时候,比如各种编辑器的恢复撤销功能,数据库与操作系统的备份操作。都可以使用备忘录模式。
二 示例和代码
比如京剧变脸,可以变不同颜色的脸,比如变到某种脸的时候,撤销成上次的脸。
把要保存的信息(脸)放在memo中
package com.qing.memo;
public class Memo {
private String face;
public Memo(String face) {
this.face = face;
}
public String getFace() {
return face;
}
public void setFace(String face) {
this.face = face;
}
}
提供创建备忘录和恢复备忘录数据的功能,它可以访问备忘录里的所有信息。
package com.qing.memo;
public class Initiator {
private String face;
public String getFace() {
return face;
}
public void setFace(String face) {
this.face = face;
}
public Memo createMemo(){
return new Memo(face);
}
public void restoreMemo(Memo memo){
this.setFace(memo.getFace());
}
}
对备忘录进行管理,提供保存和获取备忘录的功能,但其不能对备忘录的内容进行修改。
package com.qing.memo;
public class Manager {
private Memo memo;
public Memo getMemo() {
return memo;
}
public void setMemo(Memo memo) {
this.memo = memo;
}
}
测试
package com.qing.memo;
public class Test1 {
public static void main(String[] args) {
Initiator initiator = new Initiator();
Manager manager = new Manager();
//第一次变脸
initiator.setFace("绿脸");
//第一次变脸存档
manager.setMemo(initiator.createMemo());
System.out.println("当前的脸是"+initiator.getFace());
//第二次变脸
initiator.setFace("黑脸");
//第二次变脸存档
manager.setMemo(initiator.createMemo());
System.out.println("当前的脸是"+initiator.getFace());
//第三次变脸(未存档)
initiator.setFace("黄脸");
//撤销第三次变脸
initiator.restoreMemo(manager.getMemo());
System.out.println("当前的脸是"+initiator.getFace());
}
}