Memento Pattern - CodeProject
-
Upload
igor-gjorgjiev -
Category
Documents
-
view
66 -
download
0
description
Transcript of Memento Pattern - CodeProject
Memento Pattern - CodeProject
http://www.codeproject.com/Articles/667701/Memento-Pattern[12/10/2013 22:24:03]
10,140,678 members (40,336 online) 2.3K Sign out
2 Member 3810050
home quick answers discussions features community help
Articles » Web Development » Wiki.ASP.NET articles » General
Article
Browse Code
Stats
Revisions (5)
Alternatives
Comments &Discussions
Add your ownalternative version
About Article
The memento designpattern is a pattern thathelps to save the objectinternal state in an externalplace enabling us to restorethe state later when
Type Article
Licence CPOL
First Posted 1 Oct 2008
Views 517
Bookmarked 1 time
pattern object
computing internal , +
Next
Rate:
Memento PatternBy ASP.NET Community, 12 Oct 2013
Editorial NoteThis articles was originally at wiki.asp.net but has now been given a new home on CodeProject. Editing rights forthis article has been set at Bronze or above, so please go in and edit and update this article to keep it fresh andrelevant.
The memento design pattern is a pattern that helps to save the object internal state in an external place enabling us to restore the state later when needed. The memento pattern doesn’t violate encapsulation of the internal state. The pattern is rarely used but it’s very helpful in scientific computing or in computer games (saving of check points in the game for example). Use Cases for the Memento Pattern You should use the pattern in the following cases:
You need to save object’s state and use the saved state later in order to restore the saved state.You don’t want to expose the internal state of your object.
UML Diagram
0.00 (No votes) Like 20
articles
Memento Pattern - CodeProject
http://www.codeproject.com/Articles/667701/Memento-Pattern[12/10/2013 22:24:03]
Top News
Does .NET have a future?
Get the Insider News free eachmorning.
Related Videos
Memento Pattern UML
Example in C# The following code is an example of how to implement the pattern:
Collapse | Copy Code
#region Originator
public class Originator<T>{
#region Properties
public T State { get; set; }
#endregion
#region Methods
/// <summary> /// Creates a new memento to hold the current /// state /// </summary> /// <returns>The created memento</returns> public Memento<T> SaveMemento() { return (new Memento<T>(State)); }
/// <summary> /// Restores the state which is saved in the given memento /// </summary> /// <param name="memento" />The given memento
public void RestoreMemento(Memento<T> memento) { State = memento.State; }
Memento Pattern - CodeProject
http://www.codeproject.com/Articles/667701/Memento-Pattern[12/10/2013 22:24:03]
Related Articles
Multilevel Undo and RedoImplementation in C# - Part III(Using Memento Pattern)
Generic Memento Pattern forUndo-Redo in C#
Mementos
Introduction to CQRS
An Undo/Redo BufferFramework
Design pattern FAQ Part 2(Design pattern training series)
Design Patterns 3 of 3 -Behavioral Design Patterns
Illustrated GOF Design Patternsin C# Part V: Behavioral II
Memento Design Pattern
Using AOP to ImplementFunctional Requirements -Closing Dirty Forms
Practical approach to Mementodesign pattern
StateProto - Saving and
#endregion
}
#endregion
#region Memento
public class Memento<T>{
#region Properties
public T State { get; private set; }
#endregion
#region Ctor
/// <summary> /// Construct a new memento object with the /// given state /// </summary> /// <param name="state" />The given state public Memento(T state) { State = state; }
#endregion
}
#endregion
#region Caretaker
public class Caretaker<T>{ #region Properties public Memento<T> Memento { get; set; } #endregion}
#endregion
Memento Pattern - CodeProject
http://www.codeproject.com/Articles/667701/Memento-Pattern[12/10/2013 22:24:03]
Restoring the State Machine
Six common uses of theTemplate Design Pattern:Design Pattern series
Design Patterns
The best way to rememberdesign patterns
Design Patterns: CommandPattern
Design pattern FAQ Part 1(Training)
Design pattern FAQ Part 3 (Design pattern training series)
Generic implementation ofIEditableObject viaTypeDescriptor and Reflection
Multilevel Undo and RedoImplementation in C# - Part II(Using Command Pattern)
The given example shows the three parts of the pattern: the Originator, the Memento and the Caretaker. The Caretaker is the repository for the Memento. You can also see that once the Memento object is created you can’t change the saved state and in order to save a new Memento you need to create it again. Lets look at an example of how to use the pattern in code:
Collapse | Copy Code
As you can see the saved state is inserted to the Caretaker object and than you can change the state of the Originator to whatever you need. In order to restore the Originator state you use the restore method and pass it the Caretaker’s saved Memento.
Summary To sum up the post, the memento pattern is is used for saving encapsulated object state in an external object. The state can then be restored by demand. As I wrote the places that you’ll want to use the pattern are in scientific computing or in computer games but it can be helpful also in other places.
LicenseThis article, along with any associated source code and files, is licensed under The Code Project Open License(CPOL)
About the Author
Originator<string> org = new Originator<string>();org.State = "Old State";// Store internal state in the caretaker objectCaretaker<string> caretaker = new Caretaker<string>();caretaker.Memento = org.SaveMemento();Console.WriteLine("This is the old state: {0}", org.State);org.State = "New state";Console.WriteLine("This is the new state: {0}", org.State);// Restore saved state from the caretakerorg.RestoreMemento(caretaker.Memento);Console.WriteLine("Old state was restored: {0}", org.State);// Wait for userConsole.Read();
Memento Pattern - CodeProject
http://www.codeproject.com/Articles/667701/Memento-Pattern[12/10/2013 22:24:03]
Permalink | Advertise | Privacy | Mobile Web01 | 2.7.1310010.1 | Last Updated 12 Oct 2013
Article Copyright 2008 by ASP.NET CommunityEverything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid
ASP.NET Community United States
The ASP.NET Wiki was started by Scott Hanselman in February of 2008. The idea is that folksspend a lot of time trolling the blogs, googlinglive-searching for answers to common "How To"questions. There's piles of fantastic community-created and MSFT-created content out there,but if it's not found by a search engine and the right combination of keywords, it's often lost. The ASP.NET Wiki articles moved to CodeProject in October 2013 and will live on, loved,protected and updated by the community.
Group type: Collaborative Group
1 members
Apply to join this group
Article Top
Comments and Discussions