1. 程式人生 > >我的設計模式:備忘錄模式

我的設計模式:備忘錄模式

內置 public 設置 多重 解決 緩存 接口設計 怎麽辦 發起人

我的設計模式-備忘錄模式


恢復到最初的狀態-->對原始狀態的保留和恢復

聯想到的業務: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;

}

}



我的設計模式:備忘錄模式