Skip to content

milospantelinac/JavaScript_Singleton_Design_Pattern

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 

Repository files navigation

JavaScript - Singleton Design Pattern

Singleton Patern ograničava broj instanci određenog objekta na samo jednu. Ova pojedinačna instanca naziva se singleton.

Upotreba Singletona

Singleton je koristan u situacijama u kojima je potrebno koordinisati radnje celog sistema s jednog središnjeg mjesta. Primer je skup veze baze podataka. Skup upravlja stvaranjem, uništavanjem i vekom trajanja svih veza baze podataka za celu aplikaciju osiguravajući da se nijedna veza ne izgubi.

Nekoliko drugih paterna, kao što su Fectory, Prototip i Fasada, često se implementiraju kao Singleton kada je potrebna samo jedna instanca.

Diagram

singleton_diagram

Učesnici

Objekti koji učestvuju u ovom paternu su:

Singleton -- U primeru: SpaceX

  • definiše getInstance() koja vraća jedinstvenu instancu.
  • odgovoran za stvaranje i upravljanjem objektom instance

Primer

Objekat SpaceX implementiran je kao neposredna anonimna funkcija. Funkcija se odmah izvršava wrepovanjem u zagradi nakon kojih slede dve dodatne zagrade. Zove se anonymous, jer nema ime (Self-Invoking Functions).

Metoda getInstance je deo SpaceX-a objekta koji vraća jednu instancu objekta dok zadržava privatnu referencu na njega koja nije dostupna public world-u.

Metoda getInstance demonstrira još jedan dizajn patern koji se zove Lazy Load. Lazy Load proverava je li instanca već stvorena; ako nije, stvara ga i storuje za buduću upotrebu. Svi sledeći pozivi primit će storovanu instancu. Lazy Load je tehnika uštede procesora i memorije stvaranjem objekata samo kada je to apsolutno neophodno.

var SpaceX = (function () {
    var instance;

    function createInstance() {
        var object = new Object("Ja sam SapceX instanca!");
        return object;
    }

    return {
        getInstance: function () {
            if (!instance) {
                instance = createInstance();
            }
            return instance;
        }
    };
})();

var instance1 = SpaceX.getInstance();
var instance2 = SpaceX.getInstance();

console.log("Da li je instanca ista? " + (instance1 === instance2));
// → Da li je instanca ista? true

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published