Aha!設計模式 93 備忘錄模式 1)

2021-09-24 13:37:20 字數 798 閱讀 5635

意圖

由物件根據外部環境的要求生成儲存內部狀態的資料並交給外部儲存。外部環境在需要的時候可以將該資料返還給這個物件並恢復之前儲存的狀態。

動機

經常會有需求儲存某個物件的內部狀態。例如在某些重要的系統中,為了防止操作失誤,會希望將設定內容的狀態儲存起來,從而在必要的時候有辦法將其恢復。在很多軟體中使用的undo功能也有類似的需求。恢復物件原來狀態的乙個必要條件就是先取得並儲存物件的狀態。

取得物件狀態的方式有兩種。一種是從外部取得。但是這種方式需要利用者了解物件的內部狀態,這違反了封裝的原則。可能會造成不必要的耦合關係。另外一種方式是讓使用者自己生成儲存狀態的資料,這種方式很好地維持了物件的封裝,簡化了利用者的工作。

例如上圖中的圖形編輯軟體,隨著使用者對矩形框的拖動操作。連線線的狀態會發生變化。當使用者向右拖動下面的矩形框時,連線線位置也會隨之發生變化。但是由於需要維持連線線和矩形框的連線關係。最終連線線停留在兩個矩形的右下角和左上角。實現這個操作的取消操作並不容易:因為最後到達右側狀態的初始狀態不止一種。當使用者將下面的矩形框拖回原來位置的時候,軟體無法知道連線線應該恢復到什麼位置。

這時比較現實的方法就是儲存拖動之前連線線的狀態。當使用者開始拖動矩形框時軟體儲存連線線和矩形框的狀態,當需要執行撤銷操作時候,軟體恢復連線線和矩形框的狀態即可。

如果我們將取得連線線的狀態和恢復連線線的狀態這兩個操作都交給連線線物件自己的話,這就是備忘錄模式的乙個應用例項。

設計模式 備忘錄模式

錄入大批人員資料。正在錄入當前人資料時,發現上乙個人的資料錄錯了,此時需要恢復上乙個人的資料,再進行修改。word文件編輯時,突然電腦宕機或者斷電,再開啟時,可以看到word提示你恢復以前的文件。就死儲存某個物件內部狀態的拷貝,這樣以後就可以將該物件恢復到原先的狀態。源髮器類originator 備...

設計模式 備忘錄模式

備忘錄模式 memento pattern 在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態。這樣以後就可將該物件恢復到原先儲存的狀態。涉及角色 1.original 發起人 負責建立乙個備忘錄memento,用以記錄當前時刻自身的內部狀態,並可使用備忘錄恢復內部狀態。ori...

設計模式 備忘錄模式

備忘錄模式是一種行為模式,該模式業內關於儲存物件當前狀態,並且之後可以再次恢復到此狀態。備忘錄模式實現的方式需要保證被儲存的物件狀態不能被物件從外部訪問,目的是為了保護好被儲存的這些物件狀態的完整性以及內部實現不向外暴露。在不破壞封閉的前提下,捕獲乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣...