Singleton

by psoares

HTML

<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.9.0/dijit/themes/claro/claro.css">

JavaScript

define("showcase/modules/SingletonScope", [
    "dojo/_base/declare"], function (declare) {
    var instance;

    var Singleton = declare(null, {
        constructor: function () {
            console.debug("singleton-scoped object constructor");
        }
    });

    Singleton.getInstance = function () {
        if (!instance) {
            instance = new Singleton();
            return instance;
        }
    };

    return Singleton;
});

define("showcase/modules/PrototypeScope", [
    "dojo/_base/declare"], function (declare) {
    var Prototype = declare(null, {
        constructor: function () {
            console.debug("prototype-scoped object constructor");
        }
    });

    Prototype.getInstance = function () {
        return new Prototype();
    };

    return Prototype;
});

define("showcase/modules/ScopedObject", ["dojo/_base/declare"], function (declare) {
    console.log('** module **  initialization');

    var ScopedObject = declare(null, {

        items: [],

        constructor: function () {
            this.inherited(arguments);
        },

        getItems: function () {
            return this.items
        },
        setItems: function (newItems) {
            this.items = newItems
        },
        addItem: function (item) {
            this.items.push(item)
        }
    });

    ScopedObject.getInstance = function(){
        this.inherited(arguments);
    };
    
    return ScopedObject;
});

require([
    "dojo/_base/declare",
    "showcase/modules/SingletonScope",
    "showcase/modules/ScopedObject"], function (declare, Scope, ScopedObject) {
    var SingletonClass = declare([ScopedObject, Scope], {});
    debugger;
    var singletonObj = SingletonClass.getInstance();
    debugger;
    singletonObj.addItem('item1')
    console.log(singletonObj.getItems())
});

/*require(["dojo/_base/declare",
    "showcase/modules/SingletonScope",
    "showcase/modules/ScopedObject"], function (declare, Scope, ScopedObject) {
    var...