Egyke (Singleton) tervezési minta

Előfordul, hogy van egy objektumunk, amit nem szeretnénk, ha több példányban fordulna elő. Erre a problémára szolgáltat receptet az egyke (singleton) tervezési minta, ami azt írja elő, hogy egy adott osztályból csak egyetlen példány létezhessen. JavaScriptben is lehetséges az egyke tervezési minta megvalósítása. Következzen tehát néhány példa az egyke minta megvalósítására.
Egyke objektumot legegyszerűbben objektum literállal hozhatunk létre.

var Wizard = {
    config : {
        "question_operators": ['answered', 'not_answered']
    },
    Init : function (){
    },
    ShowErrMsg = function(msg){
        var oDiv = $('errorMessage');
        oDiv.style.display = 'block';
        oDiv.innerHTML = msg;
    },
    HideErrMsg = function(){
        $('errorMessage').style.display = 'none';
    }
};

Objektum literállal azonnal egy példányt hozunk létre. Mivel konstruktor függvény nem létezik, ezért több példány a new operátorral nem jöhet létre.

Függvénnyel is képesek vagyunk Singletont alkalmazni.

var AnimationManager = new function(){
 this.framesPerSecond = 30;
 this.startAnimation = function(){};
};

Egy anonim függvényt hoztunk létre, amelyet a new operátorral példányosítunk. Az objektum literálhoz képest két előnye is van ennek a megoldásnak. Privát láthatóságú példányváltozókat is tudunk használni, és tetszőleges kódot tudunk lefuttatni az objektum létrehozásának pillanatában.

var objSingletion2 = new function(){
        // private variable
        var _name = '';

        // public variable
        this.publicVariable = '';

        // methods
        function Init(){
        }

        Init();
};

Annak ellenére, hogy anonim konstruktor függvényből példányosítottuk az objektumunkat, mégis képesek vagyunk hivatkozni a konstruktor függvényre az objektum constructor tulajdonságán keresztül. A constructor egy minden egyes objektum esetén létező tulajdonság, melynek értéke az a függvény objektum, amely létrehozta az adott objektumot.

var obj1 = new function(){
    this.valamiTulajdonsag = 0;
    this.valamiMetodus = function(){};
};
var obj2 = new obj1.constructor();
alert(obj2.valamiTulajdonsag); // 0

Ha igazi Singleton objektumot szeretnénk létrehozni, azaz ne lehessen további példányokat létrehozni a konstruktor függvényből, a constructor tulajdonsághoz null értéket kell rendelnünk a függvény konstruktorban (singleton.html).

var obj1 = new function(){
    this.constructor = null;
    this.valamiTulajdonsag = 0;
    this.valamiMetodus = function(){};
};
var obj2 = new obj1.constructor(); // HIBA