单例模式 详解

来源:互联网 发布:与sqlserver建立连接 编辑:程序博客网 时间:2024/04/30 03:04

定义

保证一个类仅有一个实例,并且提供一个访问它的全局访问点;
(在该实例不存在的情况下,可以通过一个方法创建一个类来实现创建类的新实例;如果实例已经存在,它会简单返回该对象的引用)

创建型模式


适用场景

  • 当类只有一个实例而且客户可以从一个众所周知的访问点访问它时;
  • 该唯一的实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时;

实现代码

var Singleton = (function () {    //保持了Singleton的一个引用    var instance;    function init () {        var privateRandomNum = Math.random();        return {            getRandomNum : function () {                return privateRandomNum;            }        }    };    return {        getInstance : function () {            if (!instance)                instance = init();            return instance;        }    };})();var singleA = Singleton.getInstance();var singleB = Singleton.getInstance();console.log(singleA.getRandomNum() === singleB.getRandomNum());var WRSingleton = (function () {    var instance;    function init () {        var privateRandomNum = Math.random();        return {            getRandomNum : function () {                return privateRandomNum;            }        }    };    return {        getInstance : function () {            instance = init();            return instance;        }    };})();var wrsingleA = WRSingleton.getInstance();var wrsingleB = WRSingleton.getInstance();console.log(wrsingleA.getRandomNum() === wrsingleB.getRandomNum());
  • 其实两段代码的差别在于,前者获取对象的实例,如果存在就返回,不存在就创建实例;而后者每次都要创建新实例,不会判断实例已经创建;
  • init 中的是私有方法和变量,而 return 中的是公有方法和变量;
0 0
原创粉丝点击