您的位置:首页 > 其它

备忘录模式

2018-10-29 08:32 30 查看

文档查阅说明:

Tongkey

yiibai

runoob

大话设计模式

定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态

使用场景:

● 需要保存和恢复数据的相关状态场景。

● 提供一个可回滚(rollback)的操作。

● 需要监控的副本场景中。

● 数据库连接的事务管理就是用的备忘录模式。

注意:

●备忘录的生命期

●备忘录的性能

不要在频繁建立备份的场景中使用备忘录模式(比如一个for循环中)。   

clone方式备忘录:

● 发起人角色融合了发起人角色和备忘录角色,具有双重功效

多状态的备忘录模式

● 增加了一个BeanUtils类,其中backupProp是把发起人的所有属性值转换到HashMap中,方便备忘录角色存储。restoreProp方法则是把HashMap中的值返回到发起人角色中

[code]public class Memento {
private boolean state;

public Memento(boolean state) {
super();
this.state = state;
}

public boolean isState() {
return state;
}

public void setState(boolean state) {
this.state = state;
}

}
[code]public class Originator {
private boolean state;
private Memento memento;

public boolean isState() {
return state;
}
public void setState(boolean state) {
this.state = state;
}
public Memento getMemento() {
return new  Memento(state);
}
public void setMemento(Memento memento) {
this.memento = memento;
}

public void show() {
System.out.println("state:"+state);
}
}
[code]public class Caretaker {
private Memento memento;

public Memento getMemento() {
return memento;
}

public void setMemento(Memento memento) {
this.memento = memento;
}
}
[code]public class Test {
public static void main(String[] args) {
Originator originator = new Originator();
originator.setState(true);
originator.show();

Caretaker caretaker = new Caretaker();
caretaker.setMemento(originator.getMemento());

originator.setState(false);
originator.show();

originator.setMemento(caretaker.getMemento());
originator.show();

}
}

 

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