您的位置:首页 > 其它

设计模式学习笔记(20)——备忘录模式

2015-05-22 16:07 239 查看
一、模式定义
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。
二、模式结构



Originator类:被备份的类,负责生成备份和还原备份

Memento类:用来存储Originator中要备份的属性

CareTaker类:负责存储Memento备份

三、模式实现

public class Originator {

private String value;
public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}

public Originator(String value) {
this.value = value;
}

public Memento createMemento(){
return new Memento(value);
}

public void restoreMemento(Memento memento){
this.value = memento.getValue();
}
}

public class Memento {

private String value;

public Memento(String value) {
this.value = value;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}
}

public class CareTaker {

private Memento memento;

public CareTaker(Memento memento) {
this.memento = memento;
}

public Memento getMemento() {
return memento;
}

public void setMemento(Memento memento) {
this.memento = memento;
}
}

public class Test {

public static void main(String[] args) {

// 创建原始类
Originator origi = new Originator("egg");

// 创建备忘录
CareTaker storage = new CareTaker(origi.createMemento());

// 修改原始类的状态
System.out.println("初始化状态为:" + origi.getValue());
origi.setValue("niu");
System.out.println("修改后的状态为:" + origi.getValue());

// 回复原始类的状态
origi.restoreMemento(storage.getMemento());
System.out.println("恢复后的状态为:" + origi.getValue());
}
}

[b]四、使用场景[/b]
1.需要保存和恢复数据的相关状态场景。
2.提供一个可回滚的操作,比如说各种编辑器中的Ctrl+Z组合键。
3.需要监控的副本场景中。
4.数据库连接的事务管理就是用的备忘录模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: