设计模式学习之六-单例模式

单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

核心

单例模式的核心在于:确保只有一个实例,并提供全局访问。
意思就是关于某个特定功能的实例,有且只有这一个,反复使用这一个实例。

举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var Singleton = function( name ){
this.name = name;
this.instance = null;
};

Singleton.prototype.getName = function(){
alert ( this.name );
};
Singleton.getInstance = function( name ){
this.instance = new Singleton( name );
return this.instance;
};
var a = Singleton.getInstance( 'sven1' );
var b = Singleton.getInstance( 'sven2' );

console.log( a===b ) //false

显然,a和b是不等的2个实例,当我们使用这种方式应用于页面上的弹窗时,创建弹窗类,页面上的弹窗只有一个,而我们创建
弹窗类的实例也应该只有一个,不应反复创建多个无用的实例,于是在getInstance方法中我们添加:

1
2
3
4
5
6
7
8
9
10
Singleton.getInstance = function( name ){

+ if ( !this.instance ){
+ this.instance = new Singleton( name );
+ }

return this.instance;
};

console.log( a === b ) // true

这样的好处在于,我们使用的始终是第一个创建的实例,避免了创建多个重复的实例。

惰性单例

简而言之,就是在需要这个实例时,才去创建该实例。
比如我们要实现一个点击按钮,弹出弹框的功能,第一种方案是在页面加载完时,就创建该实例,但是我们不一定会触发
点击按钮,所以这个实例并没有被用到,浪费了内存。采用惰性单例的话,是在onclick时,才去创建该实例。