Double Possible:
La plus simple/la meilleure façon de mettre en œuvre singleton en JavaScript?Je suis en utilisant ce modèle pour les singletons, dans l'exemple, le singleton est PlanetEarth:
var NAMESPACE = function () { var privateFunction1 = function () { privateFunction2(); }; var privateFunction2 = function () { alert('I\'m private!'); }; var Constructors = {}; Constructors.PlanetEarth = function () { privateFunction1(); privateFunction2(); }; Constructors.PlanetEarth.prototype = { someMethod: function () { if (console && console.log) { console.log('some method'); } } }; Constructors.Person = function (name, address) { this.name = name; this.address = address; }; Constructors.Person.prototype = { walk: function () { alert('STOMP!'); } }; return { Person: Constructors.Person, // there can be many PlanetEarth: new Constructors.PlanetEarth() // there can only be one! }; }();
Depuis PlanetEarth'constructeur reste privé, il ne peut en être un.
Maintenant, quelque chose me dit que cette auto-cuit chose n'est pas le mieux qu'on puisse faire, surtout parce que je n'ai pas une formation académique, j'ai tendance à résoudre des problèmes dans la stupide façons. Que proposeriez-vous comme une meilleure alternative à ma méthode, où le mieux est défini comme stylistiquement mieux et/ou plus puissant?
Merci
Réponses
Trop de publicités?ÇA POURRAIT ÊTRE GÉNIAL SI DOWNVOTERS COMMENTAIRE !
Meilleure solution trouvée : http://code.google.com/p/jslibs/wiki/JavascriptTips#Singleton_pattern
Pour ceux qui veulent la version stricte :
Extending le post ci-dessus par Tom, si vous avez besoin d’une déclaration de type de classe et accédez à l’instance de singleton en utilisant une variable, le code ci-dessous pourrait être utile. J’aime cette notation car le code est petit moi guidant.
Pour accéder le singleton, vous le feriez
function SingletonClass()
{
// demo variable
var names = [];
// instance of the singleton
this.singletonInstance = null;
// Get the instance of the SingletonClass
// If there is no instance in this.singletonInstance, instanciate one
var getInstance = function() {
if (!this.singletonInstance) {
// create a instance
this.singletonInstance = createInstance();
}
// return the instance of the singletonClass
return this.singletonInstance;
}
// function for the creation of the SingletonClass class
var createInstance = function() {
// public methodes
return {
add : function(name) {
names.push(name);
},
names : function() {
return names;
}
}
}
// wen constructed the getInstance is automaticly called and return the SingletonClass instance
return getInstance();
}
var obj1 = new SingletonClass();
obj1.add("Jim");
console.log(obj1.names());
// prints: ["Jim"]
var obj2 = new SingletonClass();
obj2.add("Ralph");
console.log(obj1.names());
// Ralph is added to the singleton instance and there for also acceseble by obj1
// prints: ["Jim", "Ralph"]
console.log(obj2.names());
// prints: ["Jim", "Ralph"]
obj1.add("Bart");
console.log(obj2.names());
// prints: ["Jim", "Ralph", "Bart"]