Memento Design Pattern

Photo by Paule Knete on Unsplash

“You can’t undo the past… but you can certainly not repeat it.” — Bruce Willis

What is Memento Design Pattern?

When dealing with software applications sometimes it is necessary to do the undo and redo or reverse back a process. This is a type of change of state. if we think this from an OOP approach what the Memento Design Pattern does is that externalize an object’s state into another object and change it accordingly to the previous state or existed state.

There are few main objects when dealing with Memento Design Pattern.

Originator - These classes' state needs to tracked and saved for later use.

Memento - Memento object is where the state is stored, since it stores the state of the Originator class the attributes should be the same as the originator. and the attributes in the memento should be only accessible by the originator.

Care Taker - When an originator object changes to a previous state Care-Taker object is the one that keeps the track of these originators. when the state needs to be changed Care-Taker is the class to call.

Implementation of the Memento Design Pattern

First, we define the “Originator” class, and also the Memento class for managing the state.

Next, we create the “Care-Taker” object for saving and reverting state, because the Memento and originator do not deal directly, because of this “Care-Taker” act as a safeguard.

Care-Taker uses the Stack (FILO (First-in-Last-Out) ) data structure for saving and returning the state. it stores the state as a completely new set rather than adding only new elements to the existing elements (LinkedHashSet in this scenario).

Now let's try executing the program like below,

First, it creates a CareTaker object and the Originator(UserPreferences) object. This example is about storing User preferred movie categories. as the first step, we add two movie categories and save the state. Now the state will look like this.

Now we add another two elements and save them as the current state.

State 02

As above it’s a completely new state. And once we need to get the current state. what we will get is the state that we’ve recently saved. in case the developer requests the “revertState()” at the same moment after saving the state. the method will return the set of elements on the top. (Documentary, Horror, Crime, Thriller). and again if called the “revertState()” method without calling saving again it will return the next top set of elements(Documentary, Horror). It always follows First-in-Last-Out Mechanism.

For more information and Hands-on development, video follow the link in the references below.




Software Engineer

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

Should you learn Python to earn money in 2021?

System Design Interview Patterns-IV

Exploring Design Patterns — Composite Pattern (Basic Arithmetic Expression)

Migrating a project from one organization to another — GCP

Get Fluttered: A Simple Bottom App Bar Part #1

Phase 2: New Enemy Type

SLIM: Hydrating cloud native CI/CD pipelines to securely access GCP projects Staking Go-Live (part 4): Launch Dates

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Chamal Weerasinghe

Chamal Weerasinghe

Software Engineer

More from Medium

Adapter Design Pattern

Build a Payment Gateway using C#, .NET Core and Mongo DB

The Value of Refactoring in Domain-Driven Design

Anemic Domain Model vs Rich Domain Model