許多軟體都提供了這樣一種功能——撤銷,這是我們一直在用,且非常重要的乙個功能。在軟體設計中,我們通常也會設計這樣一種功能,而「撤回」功能的一種實現機制就是——備忘錄模式。
備忘錄模式:在不破壞封裝的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣可以在以後將物件恢復到原先儲存的狀態。
在備忘錄模式中,通常有下面這些角色:原發者、備忘錄、負責人。
原發者:我們會將那些需要進行備份、需要儲存內部狀態的類,設計成原發者,原發者能夠建立備忘錄。
備忘錄:備忘錄用於存放原發者的內部狀態,備忘錄物件一般只能由原發者和負責人類呼叫,不能被其他類訪問、操作。
負責人:負責儲存備忘錄,不能對備忘錄進行操作。乙個負責人類能儲存乙個或多個備忘錄物件。
單個備份是「只撤銷一次」的意思,我們來看這個案例。
//原發者
public class original
public backup createbackup()
public void refbackup(backup b)
public void setstate(string state)
public string getstate()
}//備忘錄
public class backup
public void setstate(string state)
public string getstate()
}//負責人
public class backupmanager
public void setbackup(backup backup)
}//測試類
public class test
}
通常備忘錄的設計都是跟原發類類似,因為它要儲存原發類的狀態(通常存放屬性)。
有時候,我們只希望提供撤銷一次的功能,但是有些時候,我們希望提供能夠撤銷好多次的功能,這個時候怎麼辦?
基本的設計框架沒有什麼變化,就是改兩個地方。
//負責人
public class backupmanager
public void addbackup(backup backup)
}
負責人是負責儲存備忘錄,我們可以在這個地方,用集合來存放。
public class test
}
在客戶端也要進行相應的修改。
備忘錄模式可以實現「撤回」的這種功能,但是缺點在於,這樣很消耗資源。
2018/2/27 16:28:14 @author:雲都小生
設計模式 備忘錄模式
錄入大批人員資料。正在錄入當前人資料時,發現上乙個人的資料錄錯了,此時需要恢復上乙個人的資料,再進行修改。word文件編輯時,突然電腦宕機或者斷電,再開啟時,可以看到word提示你恢復以前的文件。就死儲存某個物件內部狀態的拷貝,這樣以後就可以將該物件恢復到原先的狀態。源髮器類originator 備...
設計模式 備忘錄模式
備忘錄模式 memento pattern 在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。涉及角色 1.original 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻自身的內部狀態,並可使用備忘錄恢復內部狀態。ori...
設計模式 備忘錄模式
備忘錄模式是一種行為模式,該模式業內關於儲存物件當前狀態,並且之後可以再次恢復到此狀態。備忘錄模式實現的方式需要保證被儲存的物件狀態不能被物件從外部訪問,目的是為了保護好被儲存的這些物件狀態的完整性以及內部實現不向外暴露。在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣...