You are on page 1of 19

1

Software Design

Lecture : 42
2

Memento

or

Souvenir Design Pattern


3

Transactions in Databases

Undo Operation

Redo Operation
4

Calculator Example
Consider the case of a calculator object with an undo
operation such a calculator could simply maintain a list of
all previous operation that it has performed and thus would
be able to restore a previous calculation it has performed.
This would cause the calculator object to become larger,
more complex, and heavyweight, as the calculator object
would have to provide additional undo functionality and
should maintain a list of all previous operations
5

Memento Design Pattern

 It is sometimes necessary to capture the internal state of


an object at some point and have the ability to restore
the object to that state later in time.

 The state of an object can be defined as the values of its


properties or attributes at any given point of time.
6

Motivation
 The Memento pattern is useful for designing a
mechanism to capture and store the state of an object so
that subsequently, when needed, the object can be put
back to this (previous) state.

 This is more like an “undo operation”


7

Motivation
The Memento pattern can be used to accomplish
this without exposing the object’s internal
structure
8

Memento
The originator stores all those attributes that are
required for restoring its state in a separate
object referred to as a Memento and returns it
to the client.
Thus a Memento can be viewed as an object that
contains the internal state of another object, at a
given point of time
9

Concepts in Memento: Originator

• The object whose state needs to be captured is


referred to as the originator.
• When a client wants to save the state of the
originator, it requests the current state from the
originator.
10

Memento Object
A Memento object must hide the originator
variable values from all objects except the
originator.

In other words, it should protect its internal


state against access by objects other than the
originator
11

Memento

Towards this end, a Memento should be


designed to provide restricted access to other
objects while the originator is allowed to access
its internal state.
12

Restoring an Object – Past Status

When the client wants to restore the originator


back to its previous state, it simply passes the
memento back to the originator. The originator
uses the state information contained in the
memento and puts itself back to the state stored
in the Memento object.
13

Roles in Memento Design Pattern


Originator - the object that knows how to
save itself.

Caretaker - the object that knows why and when


the Originator needs to save and restore itself.

Memento - the lock box that is written and read


by the Originator, and shepherd by
the Caretaker.
14

Class Diagram of Memento


15
16

• Memento
▫ Stores internal state of the Originator object. The state can include
any number of state variables.
▫ The Memento must have two interfaces, an interface to the
caretaker. This interface must not allow any operations or any access
to internal state stored by the memento and thus honors
encapsulation. The other interface is to the originator and allows the
originator to access any state variables necessary to for the
originator to restore previous state.
• Caretaker
▫ Responsible for keeping the memento.
▫ The memento is opaque to the caretaker, and the caretaker
must not operate on it.
17

Originator

 Creates a memento object capturing the originators


internal state.
 Use the memento object to restore its previous state.

Caretaker

 Responsible for keeping the memento.


 The memento is opaque to the caretaker, and the caretaker
must not operate on it.
18

Processing Logic
 A Caretaker would like to perform an operation on the Originator while
having the possibility to rollback. The caretaker calls the create Memento()
method on the originator asking the originator to pass it a memento object.
At this point the originator creates a memento object saving its internal state
and passes the memento to the caretaker. The caretaker maintains the
memento object and performs the operation. In case of the need to undo the
operation, the caretaker calls the set Memento() method on the originator
passing the maintained memento object. The originator would accept the
memento, using it to restore its previous state.

19

Example

You might also like