1.1-What(定义)
定义:
--- 保证一个类仅有一个实例,并提供一个访问它的全局访问点。
- 单例类只能有一个实例。
- 单例类必须自己创建自己的唯一实例。
- 单例类必须给所有其他对象提供这一实例。
优点:
1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)
2、避免对资源的多重占用(比如写文件操作)。
缺点:
1、没有接口,不能继承,与单一职责原则冲突,一个类应该只关心内部逻辑,而不关心外面怎么样来实例化。
适用情况
1、当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
2、产生某对象会消耗过多的资源,为避免频繁地创建与销毁对象对资源的浪费。如对数据库的操作、访问IO、线程池、网络请求等。
1.2-How(实现)
---用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象。
// Singleton.getInstance 来获取 Singleton 类的唯一对象
var Singleton = function( name ){
this.name = name;
this.instance = null;
};
Singleton.prototype.getName = function(){
alert ( this.name );
};
Singleton.getInstance = function( name ){
if ( !this.instance ){
this.instance = new Singleton( name );
}
return this.instance;
};
var a = Singleton.getInstance( 'sven1' );
var b = Singleton.getInstance( 'sven2' );
alert ( a === b ); // true