Jest to wzorzec ograniczający utworzenie tylko jednej instancji
obiektu. Raz stworzona instancja już zawsze będzie zwracana jako referencja np. przy próbie stworzenia kolejnej.
Zwykle stosuje się singleton przy:
– obiektach konfiguracyjnych, będących zbiorem podstawowych danych dla całej aplikacji
– połączeniach np z bazą danych, zwykle jedno jest wystarczające
– zapisywania logów z aplikacji, jedna instancja gwarantuje brak duplikatów komunikatów
Przykład:
let Singleton = (function(){
let instance = null;
let privLanguage = "en";
function Configuration() {
this.getLanguage = function() { return privLanguage; }
this.setLanguage = function(lang) { privLanguage = lang; }
}
return {
getInstance: function () {
if(!instance) {
instance = new Configuration();
}
return instance;
}
}
})();
Singleton.getInstance().getLanguage();
// en
let config = Singleton.getInstance();
config.setLanguage("pl");
config.getLanguage(); // pl
let config2 = Singleton.getInstance();
config.getLanguage(); // pl
Jak widać singleton pilnuje aby była tylko jego jedna instancja niezależnie od ilości pobrania referencji do singletona.
KW