版权声明:本文为博主原创文章,未经博主允许不得转载。转载请注明出处,并告知本人 https://blog.csdn.net/the_conquer_zzy/article/details/83579301
备忘录模式: 在不破坏封装性的前提下,捕获一个对象的内部状态, 并在该对象之外保存这个状态。这样以后可将该对象恢复到原先保存的状态
备忘录模式角色:
- Originator 发起人角色
- Memento 备忘录角色
- Caretaker 备忘录管理员角色
public class Originator{
private String state="";
public String getState(){
return state;
}
public void setState(String state){
this.state=state;
}
//创建备忘录
public Memento createMemento(){
return new Memento(this.state);
}
//恢复备忘录
public void restoreMemento(Memento memento){
this.setState(memento.getState());
}
}
public class Memento{
private String state="";
public Memento(String state){
this.state=state;
}
public String getState(){
return state;
}
public void setState(String state){
this.state=state;
}
}
public class Caretaker{
private Memento memento;
public Memento getMemento(){
return memento;
}
public void setMemento(Memento memento){
this.memento=memento;
}
}
public class Client{
public static void main(String [] args){
Originator originator=new Originator();
Caretaker caretaker=new Caretaker();
caretaker.setMemento(originator.createMemento());
originator.restoreMemento(caretaker.getMemento());
}
}
备忘录模式的应用场景
- 需要提供一个可回滚的操作
- 需要监控的副本场景中
- 数据库连接的事务管理就是用的备忘录模式
备忘录模式的注意事项
- 备忘录的生命周期 。要主动管理备忘录对象,不使用就要删除引用, 等待垃圾回收器对它的回收处理
- 备忘录的性能 不要在循环中使用备忘录。1. 控制不了备忘录建立的对象数量 2. 大对象的建立要消耗资源
备忘录模式的扩展
- 利用clone方式的备忘录,这个也会牵涉到浅拷贝的问题
- 利用hashmap进行多状态,多版本的备忘录
- 为了达到更好的封装。 可以采用内部类进行处理。 内部类全是private的访问权限。 可以增加一个接口,完成关联的效果。
要点:
考虑到对象的安全问题。一个类可以实现多个接口, 一个是业务的正常接口,叫宽接口。 另一个接口是空接口,目的是提供给子系统外的模块访问。比如容器对象,这个叫做窄接口。