擴充套件
在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可將該物件恢復到原先儲存的狀態
通俗地說,備忘錄模式就是乙個物件的備份模式,提供了一種程式資料的備份方法
//發起人角色
public
class
originator
public
void
setstate(string state)
//建立乙個備忘錄
public memeto creatememento()
//恢復乙個備忘錄
public
void
restorememento(memento _memento)
}//備忘錄角色
public
class
memento
public string getstate()
public
void
setstate(string state)
}//備忘錄管理員角色
public
class
caretaker
public
void
setmemento(memento memento)
}//場景類
public
class
client
}
精簡了程式,高層模組的依賴也少了,可用於比較簡單的場景或者比較單一的場景中,盡量不要與其他的物件產生耦合關係
//發起人自主備份和恢復
public
class
originator
implements
cloneable
public
void
setstate(string state)
//建立乙個備忘錄
public
void
creatememento()
//恢復乙個備忘錄
public
void
restorememento()
//轉殖當前物件
@override
protected originator clone() catch (clonenotsupportedexception e)
return
null;
} }//場景類
public
class
client
}
如果要設計乙個在執行期決定備份狀態的框架,則建議採用aop框架來實現,避免採用動態**無謂地增加程式邏輯複雜性
//發起者
public
class
originator
public
void
setstate1(string state1)
public string getstate2()
public
void
setstate2(string state2)
public string getstate3()
public
void
setstate3(string state3)
//建立乙個備忘錄
public memento creatememento()
//恢復乙個備忘錄
public
void
restorememento(memento _memento)
//增加乙個tostring方法
@override
public string tostring()
} //beanutils工具類
public
class
beanutils );
if(!fieldname.equalsignorecase("class"))
} } catch (exception e)
return result;
} //把hashmap的值返回到bean中
public
static
void
restoreprop(object bean,hashmap propmap));
} }
} catch (exception e)
} }//備忘錄角色
public
class
memento
public hashmap getstatemap()
public
void
setstatemap(hashmap statemap)
}//場景類
public
class
client
}
檢查點(check point),也就是你在備份的時候做的戳記,系統級的備份一般是時間戳, 我們只要把通用**中的caretaker管理員稍做修改就可以了可能出現記憶體溢位問題,該備份一旦產生就裝入記憶體,沒有任何銷毀的意向,非常危險。所以建議限制map的上限
//備忘錄管理員
public
class
caretaker
public
void
setmemento(string idx,memento memento)
}//場景類
public
class
client
}
乙個備份的資料是完全、絕對不能修改的,它保證資料的潔淨,避免資料汙染而使備份失去意義備份是不能被篡改的,也就是說需要縮小備份出的備忘錄的閱讀許可權,保證只能是發起人可讀就成這裡通過內建了memento來實現,設定成private禁止他人訪問,產生關聯關係則通過空介面來處理。它具有公共的訪問許可權
originator
public
void
setstate(string state)
//建立乙個備忘錄
public imemento creatememento()
//恢復乙個備忘錄
public
void
restorememento(imemento _memento)
//內建類
private
class
memento
implements
imemento
private string getstate()
private
void
setstate(string state)
} }//備忘錄的空介面
public
inte***ce
imemento
//備忘錄管理者
public
class
caretaker
public
void
setmemento(imemento memento)
}
備忘錄模式
備忘錄模式 memento 在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。originator 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻它的內部狀態,並可以使用備忘錄恢復內部狀態。originator可根據需要...
備忘錄模式
先從物件導向的三大特徵之一封裝說起。物件導向的封裝簡單點說就是把狀態 資料 和行為 操作這些資料的方法 放到一起,構成乙個單元,通常叫做類。乙個物件的行為是事先確定好的 靜態 一些指令碼,如果物件的狀態相同,物件看起來就是一樣的。所以當我們需要把乙個物件的某一時刻儲存起來,那麼只需要儲存它在那個時刻...
備忘錄模式
面臨問題 物件狀態的變化無端,如何回溯恢復物件在某個點的狀態?在軟體構建過程中,某些物件的狀態在轉換過程中,可能由於某種需要,要求程式能夠回溯到物件之前處於某個點時的狀態。如果使用一些公用介面來讓其他物件得到物件的狀態,便會暴露物件的細節實現。如何實現物件狀態的良好儲存與恢復?但同時又不會因此而破壞...