JavaScript设计模式学习之单例模式

一、单例模式介绍

                 单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
-----百度百科

单例模式实现思路:
             单例模式的实现原理是在singleton模式下,如果该实例不存在,可以通过一个方法创建一个类来实现创建类的新实例,如果实例已经存在,它会返回该对象的引用

二、单例模式的JavaScript实现


标准实现方法:
/*singleton Pattern 单例模式经典实现*/
var singleton = (function(){
//实例保持一个singleton的引用
var instance;
function init(){
//私有变量
function privateMethod() {
console.log("i am private method");
}


var privateName = "Gabriel chen";
var privateAge  =  "21";
var random = Math.random();
return {
//公有变量和方法
publicHobby : "coding javascript",
publicFriend : "chrome",
publicGetAge : function(){return privateAge},
getRandom : function(){ return random}
};


};


return {
//single实现原理,检查singleton实例,存在返回,不存在新建
getInstance : function(){
if(!instance){
instance = init();
}
return instance;
}
}
//立即调用初始化
})()


var s1= singleton.getInstance();
var s2 =  singleton.getInstance();
console.log(s1.getRandom()===s2.getRandom());

               

实现方法二:闭包方式
var single = (function(){

    var unique;

    function Construct(){

        // ... 生成单例的构造函数的代码
        //私有变量
        var privateName = "陈";
        var random = Math.random();
        //公有方法和变量
        this.name = "chen";
        this.age="21";
        
        this.getPri =function(){return privateName};
        this.getRandom =function(){return random};
    }



    unique = new Construct();



    return unique;

})(); 
var s1 = single;
var s2 = single ;
s1.name = "siming" ;
console.log(s2.getRandom()===s1.getRandom())


三、单例模式的应用场景



//网站计数器

var  myCounter = (function(){
	var counter;
	function init(){
		var  count = 0;
		this.addCount=function(){
			count=count+1;
		};
		this.getCount = function(){
			return count;
		};

		return this;
	}

	return {
		getCounter : function(){
			if (!counter) {
			counter = init();
		    }
		    return counter;
		}
		
	}
})();
var c = myCounter.getCounter();
c.addCount();
c.addCount();
var b = myCounter.getCounter();
b.getCount();




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值