有什么其他方法可以在javascript中实现Singleton Pattern吗?

时间:2014-08-16 08:23:22

标签: javascript design-patterns

尝试在一些教程之后在javascript中实现单例模式。只是想知道是否有其他方法可以实现相同的目标?

var singleton = (function(){
              var getInstance; //private variable

              var createWidget = function(){
                         var todayDate = new Date(); //private
                         var addCSS = function(){
                            console.log('THis is my css function');
                         };
                         var getDropDownData = function(){
                            console.log('This is my getDropDownData function');
                         };
                         return {
                            getDropDownData : getDropDownData,
                            addCSS: addCSS 
                         };
              };

              return {
                    getInstance: function(){
                          if(!getInstance) {
                              getInstance = createWidget();
                          }
                          return getInstance;
                    }
              };
})();
var obj = singleton.getInstance();

通过在onLoad上运行匿名函数并将其分配给某个变量来实现它。我们可以在不在onLoad上运行此函数的情况下实现它吗?

1 个答案:

答案 0 :(得分:0)

你总是可以编写一个函数来抽象出用于编写单例的样板文件。例如,这就是我要做的事情:

function singleton(prototype) {
    var instance = null;

    return {
        getInstance: function () {
            if (instance === null) {
                var Instance = prototype.init || function () {};
                Instance.prototype = prototype;
                instance = new Instance;
            } return instance;
        }
    };
}

然后你可以使用这个函数创建单例,如下所示:

var Widget = singleton({
    init: function () {
        var todayDate = new Date; // private
    },
    addCSS: function () {
        console.log("This is my addCSS function.");
    },
    getDropDownData: function () {
        console.log("This is my getDropDownData function.");
    }
});

之后你会像往常一样使用单身人士:

var widget = Widget.getInstance();

希望有所帮助。