JavaScript :
http://kaijaeger.com/articles/the-singleton-design-pattern-in-javascript.html
Dojo -tize , 1.7+, , , ,
, , ,
...
, - , , . Dojo,
"" ( Dojo), ...
MakeSingleton.js
define(['dojo/_base/lang'], function(lang)
{
return function(ctor) {
var singletonCtor,
instance = null;
singletonCtor = new function() {
this.getInstance = function() {
if (!instance) {
instance = new ctor();
instance.constructor = null;
}
return instance;
}
};
if (ctor.prototype && ctor.prototype.declaredClass) {
lang.setObject(ctor.prototype.declaredClass, singletonCtor);
}
return singletonCtor;
};
};
, Dojo 1.7+, Singleton?
, ...
MySingletonClass.js
define(['dojo/_base_declare', 'MakeSingleton'],
function(declare, MakeSingleton)
{
return MakeSingleton( declare('MySingletonClass', [...], {
}));
});
...
declare (...) MakeSingleton (...)
, (Function), Dojo, , "className" declare (...), MakeSingleton ,
, . ,
singleton ( MakeSingleton), Dojo
factory.
,
...
.
, ... "className",
, - . "className", (, ),
( , Dojo , ).
MakeSingleton.js -
, , getInstance(). getInstance()
. "" singleton, . "" (if
"className" ), . .
- singleton getInstance().
SomeOtherModule.js
define(['dojo/_base/declare', 'MySingletonClass'],
function(declare, MySingletonClass)
{
return declare(null, {
mySingleton: null,
constructor: function(args) {
...
mySingleton = MySingletonClass.getInstance();
...
mySingleton.doSomething(...);
};
mySpecialSauce: function(...) {
mySingleton.doSomethingElse(...);
};
moreSauce: function(...) {
var x;
x = MySingletonClass.getInstance();
x = new window.MySingletonClass();
x = new MySingletonClass();
x = new require.modules['MySingletonClass'].result();
};
});
});
, , , script ..
Singleton, , ""
.