解析C 設計模式程式設計中備忘錄模式的運用

2022-09-26 06:30:15 字數 1457 閱讀 1830

一、概述

在軟體開發中,有時需要儲存乙個物件的狀態,以便於允許使用者取消相關操作或者從以往的狀態中恢復過來。比如乙個文件版本管理系統,可以根據需要將指定文件恢復到之前儲存過的任意乙個狀態。這時就可以通過備忘錄模式來實現。

二、備忘錄模式

備忘錄模式可以在不破壞封裝性的前提下捕獲乙個物件的內部狀態,並在該物件程式設計客棧之外儲存這個狀態。其結構圖如下:

mementobvsztgom用於儲存originator物件的內部狀態。

origiwww.cppcns.comnator建立memento,並根據需要決定需要在memento中儲存那些狀態,同時還能從memento中恢復內部狀態。

caretaker負責儲存memento物件,但不對memento物件進行任何操作。

備忘錄模式用來儲存與物件有關的資料,這樣可以在將來對物件進行復原。例如在繪圖程式中需要儲存物件的顏色尺寸等。

三、示例

我們我們就以文件版本管理系統為例來介紹備忘錄模式。

首先定義originator,在這裡就是文件本身。

public class document

public documentversion creatememento()

public void setmemento(documentversion documentversion)

}接著定義memento。

public class documentversion

public documentversion(string content)

}最後定義caretaker,通過乙個dictionary容器儲存memento。

public class caretaker

public void adddocumentversion(documentversion documentversion)

}四、備忘錄模式的適用場景

在以下情況下可以考慮使用備忘錄模式:

如果系統需要提供回滾操作時,使用備忘錄模式非常合適。例如文字編輯器的ctrl+z撤銷操作的實現,資料庫中事務操作。

五、備忘錄模式的優缺點

備忘錄模式具有以下優點:

如果某個操作錯誤地破壞了資料的完整性,此時可以使用備忘錄模式將資料恢復成原來正確的資料。

備份的狀態資料儲存在發起人角色之外,這樣發起人就不需要對各個備份的狀態進行管理。而是由備忘錄角色進行管理,而備忘錄角色又是由管理者角色管理,符合單一職責原則。

當然,備忘錄模式也存在一定的缺點:

在實際的系統中,可能需要維護多個備份,需要額外的資源,這樣對資源的消耗比較嚴重。

六、總結

備忘錄模式主要思想是——利用備忘錄物件來對儲存發起人的內部狀態,當發起人需要恢復原來狀態時,再從備忘錄物件中進行獲取,在實際開發過程也應用到這點,例如資料庫中的事務處理。

本文標題: 解析c#設計模式程式設計中備忘錄模式的運用

本文位址: /ruanjian/csharp/143390.html

C 設計模式 備忘錄模式

應用 ifndef caretaker h define caretaker h include memento.h class caretaker void setmemento memento memento 備忘錄物件 private memento memento endif caretak...

C 設計模式 備忘錄模式

一.介紹 備忘錄模式 memento pattern 屬於行為型模式。它在不破壞封裝性的前提下,捕捉乙個物件的內部狀態,並在該物件之外儲存這個狀態,這樣以後就可將該物件恢復到原先儲存的狀態。二.實現 備忘錄顧名思義就是可以儲存多個資訊的工具。在該模式下,如果乙個物件出現了多種狀態,通過管理者的集合去...

設計模式 備忘錄模式

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