林秀栋的技术博客

设计模式(五) 单例模式

//只允许实例化一次的对象类。
//定义一个命名空间x,把多种方法放在x中,就好像jQ中的$,调用时需要x.xx,防止被其他人写的同名方法覆盖
var x = {
	g: function(){ },
	xx: function(){
		this.g();
	},
	asd: {
		asd1: function(){ }
	}
}
x.xx();
//通过单例模式也可以把代码根据功能分为不同模块


//js无静态变量,可放在函数内部,通过特权方法访问,为了创建后就能使用,需要让函数自执行一遍。
var c = (function(){
	var cc = {	//私有变量
		COUNT: 100
	}
	return {
		//对cc进行取值的方法,外部只能通过该方法取值,无法修改COUNT的值
		get: function(){
			return cc.COUNT;
		}
	}
})();


//惰性单例
//有时对于单例对象需要延迟创建,即惰性创建。
var cc = (function(){
	var _instance = null;
	function s(){
		return{
			aa: 1
		}
	}
	return function(){
		if(!_instance){
			_instance = s();
		}
		return _instance;
	}
})();
console.log(cc().aa);	//1

二-五(工厂模式、建造者模式、原型模式、单例模式)均属于创建型设计模式