SIngleton implementation without persistent variables

Hi,
I have a handle class with a singleton implementation that uses persistent variables.
classdef MyHandler < handle
properties
...
...
...
end
methods(Access=protected)
function obj = MyHandler()
%Constructor logic
end
end
methods(Static)
function inst = instance()
persistent obj;
if isempty(obj)
obj = MyPackage.MyHandler();
end
inst = obj;
end
end
end
Is there a way to implement the same functionality without usage of persistent variables ? I am trying to generate C code from a system object that uses this handle class.

Réponses (1)

Malay Agarwal
Malay Agarwal le 28 Août 2024
Modifié(e) : Malay Agarwal le 28 Août 2024
Hi @Rohan,
You can create a singleton class without using persistent variables by defining the instance as a constant property. I have attached an example class to the answer. You can verify that the class indeed behaves like a singleton:
% Create two objects
obj = singleton.getInstance
obj =
singleton with properties: x: 5 y: "Hello"
obj1 = singleton.getInstance
obj1 =
singleton with properties: x: 5 y: "Hello"
% The two objects refer to the same handle
obj == obj1
ans = logical
1
% Changing non-constant properties in one object reflects changes in both the objects
obj.x = 2;
obj, obj1
obj =
singleton with properties: x: 2 y: "Hello"
obj1 =
singleton with properties: x: 2 y: "Hello"
If you right click the class file and click on "Check Code Generation Readiness", you'll see that the tool does not report any issues:
Please refer to the following resources for more information:
Hope this helps!

2 commentaires

Rohan
Rohan le 29 Août 2024
Thanks for your answer Malay !
Neat implementation!
I do see one culprit. If I try to access the help information, like
help singleton % or
doc singleton
the instance will be initialized. This is can be easirly verified if you add
disp('Initializing')
in the actual constructor.
Any way to avoid this behavior?

Connectez-vous pour commenter.

Catégories

Produits

Version

R2022b

Question posée :

le 28 Août 2024

Commenté :

le 31 Mai 2025

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by