解析C#設計形式編程中備忘錄形式的應用。本站提示廣大學習愛好者:(解析C#設計形式編程中備忘錄形式的應用)文章只能為提供參考,不一定能成為您想要的結果。以下是解析C#設計形式編程中備忘錄形式的應用正文
1、概述
在軟件開辟中,有時須要保留一個對象的狀況,以便於許可用戶撤消相干操作或許從以往的狀況中恢復過去。好比一個文檔版本治理體系,可以依據須要將指定文檔恢復到之前保留過的隨意率性一個狀況。這時候便可以經由過程備忘錄形式來完成。
2、備忘錄形式
備忘錄形式可以在不損壞封裝性的條件下捕捉一個對象的外部狀況,並在該對象以外保留這個狀況。其構造圖以下:
Memento用於保留Originator對象的外部狀況。
Originator創立Memento,並依據須要決議須要在Memento中保留那些狀況,同時還能從Memento中恢復外部狀況。
Caretaker擔任保留Memento對象,但纰謬Memento對象停止任何操作。
備忘錄形式用來保留與對象有關的數據,如許可以在未來對對象停止回復復興。例如在畫圖法式中須要保留對象的色彩尺寸等。
3、示例
我們我們就以文檔版本治理體系為例來引見備忘錄形式。
起首界說Originator,在這裡就是文檔自己。
public class Document { public string Content { get; set; } public DocumentVersion CreateMemento() { return new DocumentVersion( Content); } public void SetMemento(DocumentVersion documentVersion) { Content = documentVersion.Content; } }
接著界說Memento。
public class DocumentVersion { public string Content { get; set; } public DocumentVersion(string content) { Content = content; } }
最初界說Caretaker,經由過程一個Dictionary容器保留Memento。
public class Caretaker { private Dictionary<int, DocumentVersion> _mementoList = new Dictionary<int, DocumentVersion>(); public DocumentVersion GetDocumentVersion(int versionID) { return _mementoList[versionID]; } public void AddDocumentVersion(DocumentVersion documentVersion) { int maxVersionID = _mementoList.Keys.Count == 0 ? 0: _mementoList.Keys.Max(); _mementoList.Add(maxVersionID + 1, documentVersion); } }
4、備忘錄形式的實用場景
在以下情形下可以斟酌應用備忘錄形式:
假如體系須要供給回滾操作時,應用備忘錄形式異常適合。例如文本編纂器的Ctrl+Z撤消操作的完成,數據庫中事務操作。
5、備忘錄形式的優缺陷
備忘錄形式具有以下長處:
假如某個操作毛病地損壞了數據的完全性,此時可使用備忘錄形式將數據恢復成本來准確的數據。
備份的狀況數據保留在提議人腳色以外,如許提議人就不須要對各個備份的狀況停止治理。而是由備忘錄腳色停止治理,而備忘錄腳色又是由治理者腳色治理,相符單一職責准繩。
固然,備忘錄形式也存在必定的缺陷:
在現實的體系中,能夠須要保護多個備份,須要額定的資本,如許對資本的消費比擬嚴重。
6、總結
備忘錄形式重要思惟是——應用備忘錄對象來對保留提議人的外部狀況,當提議人須要恢回復復興來狀況時,再從備忘錄對象中停止獲得,在現實開辟進程也運用到這點,例如數據庫中的事務處置。