File Exchange

image thumbnail

Design Pattern: Singleton (Creational)

version (39.8 KB) by

A MATLAB® OOP implementation of the Singleton Creational Design Pattern



View License

Intent: Ensures a class only has one instance and provide a global point of access to it [1].
Motivation: It's important for some classes to have exactly one instance. For example, it can be desirable to have only a single instance of a GUI. With a MATLAB® GUIDE built GUI, the driver or main function provides a global point of access which is executed to,
1. initially instantiate the GUI; and
2. subsequently bring the existing GUI into focus *not* creating a new one.

Refer to the comments in 'Singleton.m' and 'SingletonImpl.m' for detail on the implementation. The script 'testSingletonImpl.m' demonstrates the use of 'SingletonImpl.m'. Further, a corresponding UML class diagram is illustrated in 'Singleton_UML_Diagram.pdf'.

Refer to pp.127-134 Gamma et al.[1] for more information on the Singleton Design Pattern.

Written by Bobby Nedelkovski
The MathWorks Australia Pty Ltd
Copyright 2009, The MathWorks, Inc.

[1] Gamma, E., Helm, R., Johnson, R. and Vlissides, J. Design Patterns : Elements of Reusable Object-Oriented Software. Boston: Addison-Wesley, 1995.

Comments and Ratings (4)

David Busson

Made a singleton on a handle object and encountered troubles for deletion.
After deleting the object, persistent variable uniqueInstance still existed and isempty(uniqueInstance) returned 0 even though the object was deleted.
However a validity check (if isempty(uniqueInstance) || ~isvalid(uniqueInstance) ) on uniqueInstance could determine wether the handle was associated to something or not.


Abel (view profile)

Not thread safe as far as I can tell. Nor any documentation even addressing the issue.

Ron Lu

Ron Lu (view profile)

Nice example of singleton class. Thank you!

Brad Stiritz

Thank you Bobby! for your excellent implementation of this classic design pattern. I especially appreciate your extensive documentation & excellent, highly-descriptive coding style.
5-stars well-deserved. If only all MATLAB code could look like this! Highly recommended.


Updated license


Updated UML diagram to reflect inheritence from 'handle' class and usage of persistent variable 'uniqueInstance' in concrete class 'SingletonImpl'. Also MathWorks registered trademarks added to files.

MATLAB Release
MATLAB 7.8 (R2009a)

Inspired: Matlab logging facility

Download apps, toolboxes, and other File Exchange content using Add-On Explorer in MATLAB.

» Watch video