備忘錄模式

2021-08-15 19:12:59 字數 3840 閱讀 8026

擴充套件

在不破壞封裝性的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可將該物件恢復到原先儲存的狀態

通俗地說,備忘錄模式就是乙個物件的備份模式,提供了一種程式資料的備份方法

//發起人角色

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可根據需要...

備忘錄模式

先從物件導向的三大特徵之一封裝說起。物件導向的封裝簡單點說就是把狀態 資料 和行為 操作這些資料的方法 放到一起,構成乙個單元,通常叫做類。乙個物件的行為是事先確定好的 靜態 一些指令碼,如果物件的狀態相同,物件看起來就是一樣的。所以當我們需要把乙個物件的某一時刻儲存起來,那麼只需要儲存它在那個時刻...

備忘錄模式

面臨問題 物件狀態的變化無端,如何回溯恢復物件在某個點的狀態?在軟體構建過程中,某些物件的狀態在轉換過程中,可能由於某種需要,要求程式能夠回溯到物件之前處於某個點時的狀態。如果使用一些公用介面來讓其他物件得到物件的狀態,便會暴露物件的細節實現。如何實現物件狀態的良好儲存與恢復?但同時又不會因此而破壞...