我的設計模式:備忘錄模式
恢復到最初的狀態-->對原始狀態的保留和恢復
聯想到的業務:cms稿件放入到回收站,永久記錄狀態得用到數據庫啊,怎麽辦?備忘錄模式的內存緩存不適用?
類的單一職責
boy職責:狀態 改變狀態 設置狀態 獲取狀態
備忘錄職責:記錄當前的狀態 恢復狀態
迪 米特原則:最少知道原則,不和陌生人說話
問題:備忘錄只是記錄了一個節點,多個備忘錄記錄了多個節點,可以恢復到任意節點?備忘錄因該支持多個節點?
思考問題:增加備忘錄管理者manager角色,有啥好處呢?沒體驗到
Clone方式的備忘錄:實現cloneable接口,深度拷貝,適合簡單的場景
多狀態的備忘錄模式:使用到了BeanUtils,和深度拷貝有什麽區別?如何只對想要的幾個狀態進行備忘?
多備份的備忘錄:檢查點(例如:時間戳)
現在體現出備忘錄管理者的價值的時刻到了(管理多個備忘錄)
備忘錄一直增加?內存溢出的問題如何解決?
權限的問題:私有-->任何人無法訪問。 累不累-->我能訪問
雙接口設計:正常接口實現業務邏輯,寬接口 空接口-->窄接口
備忘錄的專業術語:“白箱”備忘錄模式,“黑箱”備忘錄模式 多重檢查點備忘錄
“黑箱”備忘錄參考代碼如下
發起人:
public class Originator {
//內部狀態
private String state = "";
public String getState() { return state;
}
public void setState(String state) { this.state = state;
}
//創建一個備忘錄
public IMemento createMemento(){
return new Memento(this.state); }
//恢復一個備忘錄
public void restoreMemento(IMemento _memento){
this.setState(((Memento)_memento).getState()); }
//內置類
private class Memento implements IMemento{
//發起人的內部狀態
private String state = "";
//構造函數傳遞參數
private Memento(String _state){
this.state = _state; }
private String getState() { return state;
}
private void setState(String state) { this.state = state;
}
}
}
空接口:
public interface IMemento {
}
備忘錄管理者:
public class Caretaker {
//備忘錄對象
private IMemento memento;
public IMemento getMemento() { return memento;
}
public void setMemento(IMemento memento) { this.memento = memento;
}
}
我的設計模式:備忘錄模式