備忘錄模式就是在不破壞封裝的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,在以後的某個時間點可以恢復到之前儲存的狀態。
備忘錄模式的uml圖
originator:原發器,負責建立乙個備忘錄,用來記錄物件當前的狀態,也可以用來恢復乙個物件之前的某個狀態。同時原發器還可以根據需要決定memento儲存originator的那些內部狀態。memento備忘錄,用來儲存originator的內部狀態,並且可以防止memento以外的物件訪問memento。在備忘錄memento中有兩個介面,caretaker只能看到備忘錄中的窄介面,它只能將備忘錄傳遞給其他物件。originator可以看到寬介面,允許它訪問返回到先前狀態的所有資料。caretaker:負責人,負責儲存好備忘錄,不能對備忘錄的內容進行操作和訪問,只能夠將備忘錄傳遞給其他物件。
在備忘錄模式中,最重要的就是memento。備忘錄除了原發器以外的物件都不可以訪問。
備忘錄模式的**實現
建立乙個原發器類(包含原發器類狀態的儲存和恢復)
/**
* 原發器類
*/public
class
role
public
intgetblood()
public
void
setblood
(int blood)
public
intgetmagic()
public
void
setmagic
(int magic)
public
void
display()
/** * 恢復備忘錄
*/public
void
restorememento
(rolememento rolememento)
/** * 建立備忘錄
* @return
*/public rolememento creatememento()
}
建立乙個備忘錄類
/**
* 備忘錄類
*/public
class
rolememento
public
intgetblood()
public
void
setblood
(int blood)
public
intgetmagic()
public
void
setmagic
(int magic)
}
建立乙個負責人類
/**
* 負責人,傳遞備忘錄並且能夠儲存備忘錄,但是不能提供操作訪問的方法
*/public
class
rolecaretaker
public
void
setrolememento
(rolememento rolememento)
}
建立乙個測試類
public
class
test
}
備忘錄模式的優點
給使用者提供了一種可以恢復歷史狀態的機制
實現資訊的封裝,不需要關心狀態的儲存細節
備忘錄模式的缺點
消耗資源。如果類的成員變數過多,勢必會占用比較大的資源,而且每一次儲存都會消耗一定的記憶體。
備忘錄模式的使用場景
需要儲存乙個物件在某個時刻的狀態或部分狀態
如果用乙個介面來讓其他物件得到這些狀態,將會暴露物件的實現細節並破壞物件的封裝性,乙個物件不希望外界直接訪問其內部狀態,通過負責人可以間接訪問其內部狀態。
jdk中對備忘錄模式的使用
設計模式 備忘錄模式
錄入大批人員資料。正在錄入當前人資料時,發現上乙個人的資料錄錯了,此時需要恢復上乙個人的資料,再進行修改。word文件編輯時,突然電腦宕機或者斷電,再開啟時,可以看到word提示你恢復以前的文件。就死儲存某個物件內部狀態的拷貝,這樣以後就可以將該物件恢復到原先的狀態。源髮器類originator 備...
設計模式 備忘錄模式
備忘錄模式 memento pattern 在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。涉及角色 1.original 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻自身的內部狀態,並可使用備忘錄恢復內部狀態。ori...
設計模式 備忘錄模式
備忘錄模式是一種行為模式,該模式業內關於儲存物件當前狀態,並且之後可以再次恢復到此狀態。備忘錄模式實現的方式需要保證被儲存的物件狀態不能被物件從外部訪問,目的是為了保護好被儲存的這些物件狀態的完整性以及內部實現不向外暴露。在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣...