定义
单例模式就是一个类只能实例化一个对象,并且提供了一个访问它的全局访问点。
一般在实现登陆框,或者一个全局的控制器都会用到单例模式。现实中有window对象,线程池,全局缓存等。
简单实现
var Person = function(name){ this.name = name; this.instance = null; }; Person.getInstance = function(name){ if(!this.instance){ this.instance = new Person(name); } return this.instance; }
种类
单例模式的实现由很多种方法,他们也有不同的作用。
1.用代理实现的单例
有时候,如果想让一个类既可以通过代理创建一个实例,又可以使用普通的方法new很多实例,这种情况就会用到代理。
var Person = function(name){ this.name = name; }; var CreatePerson = (function(){ var instance; return function(name){ if(!instance){ return new Person(name); } return instance; } });
上面代码中,如果我们要创建一个实例,就用createPerson来创建,如果像普通对象一样,就用new创建。
2.惰性单例
其实开始介绍的简单单例模式即是惰性单例,也就是说,这个实例在需要的时候才会创建。而不是一开始就创建。