定義
在不破壞封裝性的前提下废酷,捕獲一個對象的內(nèi)部狀態(tài)错邦,并在該對象之外保存這個狀態(tài)垂谢,這樣,以后就可以將該對象復(fù)原成原來保存的狀態(tài)牍陌。
備忘錄模式的角色
1:發(fā)起人角色(Originator)該角色記錄當(dāng)前對象的內(nèi)部狀態(tài)擎浴。負(fù)責(zé)定義哪些屬于備份范圍內(nèi)的狀態(tài),負(fù)責(zé)創(chuàng)建 和恢復(fù)備忘數(shù)據(jù)毒涧。
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)
該角色負(fù)責(zé)存儲發(fā)起人角色的內(nèi)部狀態(tài)贮预,在需要時提供發(fā)起人需要的內(nèi)部狀態(tài)數(shù)據(jù)。
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:負(fù)責(zé)人(Caretaker)
該角色對備忘錄進(jìn)行管理契讲,保存和提供備忘錄仿吞。
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();
//創(chuàng)建一個備忘錄
Memento memento = care.setMemento(org.createMemento());
//恢復(fù)一個備忘錄
org.restore(care.getMemento());
}
注意事項(xiàng)
1:備忘錄的生命周期,應(yīng)該在最近的代碼中使用捡偏,要主動管理生命周期唤冈。
2:備忘錄的性能,不能再循環(huán)中頻繁創(chuàng)建備忘錄银伟,負(fù)責(zé)會提升系統(tǒng)開銷你虹。
使用場景
1:需要保存和恢復(fù)數(shù)據(jù)的狀態(tài)。
2:提供一個可回滾的操作彤避。
3:需要監(jiān)控副本的場景傅物。
4:數(shù)據(jù)庫連接的事務(wù)管理模式就是備忘錄模式
參考資料:設(shè)計模式(java)