定义
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可以将该对象复原成原来保存的状态。
备忘录模式的角色
1:发起人角色(Originator)该角色记录当前对象的内部状态。负责定义哪些属于备份范围内的状态,负责创建 和恢复备忘数据。
public class Originator{ private String state = ""; private String getState(){ return this.state; } private void setState(String state){ this.state = state; } public Memento createMemento(){ return new Memento(this.state); } public void restoreMemento(Memento m){ this.setState(m.getState()); }}
2:备忘录角色(Memento)
该角色负责存储发起人角色的内部状态,在需要时提供发起人需要的内部状态数据。
public class Memento{ private String state; public Memento(String state){ this.state = state; } public String getState(){ return this.state; } public void setState(String state){ this.state = state; } }
3:负责人(Caretaker)
该角色对备忘录进行管理,保存和提供备忘录。
public class Caretaker{ private Memento m; public Memento getMemento{ return this.m; } public void setMemento(Memento m){ this.m = m; }}
客户端代码:
public class Client{ Originator org = new Originator(); Caretaker care = new Caretaker(); //创建一个备忘录 Memento memento = care.setMemento(org.createMemento()); //恢复一个备忘录 org.restore(care.getMemento());}
注意事项
1:备忘录的生命周期,应该在最近的代码中使用,要主动管理生命周期。
2:备忘录的性能,不能再循环中频繁创建备忘录,负责会提升系统开销。
使用场景
1:需要保存和恢复数据的状态。
2:提供一个可回滚的操作。
3:需要监控副本的场景。
4:数据库连接的事务管理模式就是备忘录模式
参考资料:设计模式(java)
文章转载于:https://www.jianshu.com/p/a03694a331a3
原著是一个有趣的人,若有侵权,请通知删除
还没有人抢沙发呢~