備忘錄模式
<設計模式其實很簡單>筆記
在不破壞封裝性的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態。這樣以後就可以將該對象恢復到原型保存的狀態。
//Originator
public class Originator{
private String State;
//建立狀態存儲對象
public Memento CreateMemento(){
return (new Memento(State));
}
//設置狀態存儲對象
public void SetMemento(Memento memento){
State = memento.getState();
}
//展現狀態
public void Show(){
System.out.println("狀態爲:" + State);
}
//獲取狀態
public String Show(){
return State;
}
//設置狀態
public void setState(String state){
State = state;
}
}
//備忘錄類
public class Memento{
private String State;
//構造函數
public Memento(String State){
this.State = State;
}
//獲取狀態
public String getState(){
return State;
}
}
//管理者
public class Caretaker{
private Memento memento;
//設定備忘
public void setMemento(Memento memento){
this.memento = memento;
}
//獲取備忘
public Memento setMemento(Memento memento){
return memento;
}
}
//客戶端
public static void main(String[] args){
Originator originator = new Originator();
originator.setState("開始!");
originator.Show();
Caretaker caretaker = new Caretaker();
caretaker.setMemento(originator.CreateMemento());
originator.setState("結束!");
originator.Show();
originator.setMemento(catetaker.getMemento());
originator.Show();
}
//將要保存的細節封裝在Memento類當中,當需要更改保存的細節時只需要修改Memento而不需要對客戶端進行修改。
//所以備忘錄模式尤其使用於功能比較複雜且需要維護或記錄屬性的歷史的類。
//備忘錄需要消耗存儲空間
③適用的地方:
當必須保存一個對象在某一時刻的全部或部分狀態以便在需要時可以將其恢復到先前狀態時。
當使用接口讓其他對象直接得到自己的狀態會暴露對象的實現細節繼而破壞其封裝性時。