单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
核心
单例模式的核心在于:确保只有一个实例,并提供全局访问。
意思就是关于某个特定功能的实例,有且只有这一个,反复使用这一个实例。
举例:
1 | var Singleton = function( name ){ |
显然,a和b是不等的2个实例,当我们使用这种方式应用于页面上的弹窗时,创建弹窗类,页面上的弹窗只有一个,而我们创建
弹窗类的实例也应该只有一个,不应反复创建多个无用的实例,于是在getInstance
方法中我们添加:
1 | Singleton.getInstance = function( name ){ |
这样的好处在于,我们使用的始终是第一个创建的实例,避免了创建多个重复的实例。
惰性单例
简而言之,就是在需要这个实例时,才去创建该实例。
比如我们要实现一个点击按钮,弹出弹框的功能,第一种方案是在页面加载完时,就创建该实例,但是我们不一定会触发
点击按钮,所以这个实例并没有被用到,浪费了内存。采用惰性单例的话,是在onclick
时,才去创建该实例。