Singleton单例模式详解
2017-05-22 11:26
281 查看
传送门:
JavaScript设计模式详解-单身狗的你来看看单例模式
比如
上面这个例子很好地解释了使用闭包如何构造单例模式。
由于作用域链,在执行
有 惰性非单例, 非惰性非单例,惰性单例。这里主要说一下惰性单例模式。
就是上面的例子修改了一下,看的到不论执行多少次,都只创建一个div。
单例很好体现出来了,惰性则体现在其只有调用
于是出现了职责分离的单例模式,大概概念如下
![](https://img-blog.csdn.net/20170522110420416?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfMzE2MjgzMzc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
代理器:
div构造器:
Img构造器:
创建各自的单例模式:
构造单例:
你会发现,
JavaScript设计模式详解-单身狗的你来看看单例模式
单例模式
单例模式就是在创建一个新的实例时,会首先判断先前是否存在该实例,不存在则创建一个新实例并返回,否则返回之前的实例。使用闭包实现单例模式
为什么使用闭包?
因为我们可以使用闭包来获取到当前实例的状态是已经创建还是尚未创建。比如
let getInstance = (function() { var instance = null; return function() { console.log(instance); if(!instance) { instance = 'created'; } return instance; } })(); getInstance(); // null getInstance(); // created
上面这个例子很好地解释了使用闭包如何构造单例模式。
由于作用域链,在执行
getInstance时首先会查找自己的作用域中是否存在
instance,不存在则重新赋值,存在则直接返回。
惰性单例
什么是惰性?就是在需要时才创建。那么非惰性的概念就是不需要时也一直存在,通过其他方式显示和隐藏它。有 惰性非单例, 非惰性非单例,惰性单例。这里主要说一下惰性单例模式。
let createDiv = (function() { let div; return function() { if(!div) { div = document.createElement('div'); div.innerText = 'I\'m div'; document.body.append(div); } return div; } })(); createDiv(); createDiv();
就是上面的例子修改了一下,看的到不论执行多少次,都只创建一个div。
单例很好体现出来了,惰性则体现在其只有调用
createDiv()时才会创建一个新实例。
职责分离的单例模式
有很多单例模式,但是集合在一起时,如果每次都一个个去判断是否存在实例是不是有些冗余?于是出现了职责分离的单例模式,大概概念如下
代理器:
let getSingle = function(fn) { let result; return function() { console.log(result); if(!result) { result = fn.apply(this, arguments); } return result; } }
div构造器:
let createDiv = function() { let div; div = document.createElement('div'); div.innerText = 'text'; document.body.append(div); return div; }
Img构造器:
let createImg = function(src) { let oImg = document.createElement('img') document.body.appendChild(oImg) return oImg }
创建各自的单例模式:
let createSingleDiv = getSingle(createDiv); let createSingleImg = getSingle(createImg);
构造单例:
let div = createSingleDiv(); let div1 = createSingleDiv(); let img = createSingleImg();
你会发现,
div和
div1是引用一样的实例的。
相关文章推荐
- Singleton_单列模式案例分析与详解
- ASP.NET C# 单例模式 Singleton 详解
- 设计模式之单例模式Singleton 详解和实例演示
- Singleton 模式详解
- 【Java学习笔记之三十】详解Java单例(Singleton)模式
- 【Java学习笔记之三十】详解Java单例(Singleton)模式
- 设计模式之单体详解 Singleton
- 单例模式(Singleton)详解——转载
- 单例模式(Singleton)详解
- Singleton_单列模式案例分析与详解
- 设计模式之单例(singleton)设计模式代码详解
- 五种单件模式之Singleton的实现方法详解
- 静态构造函数与Singleton模式在C#中的实现
- PHP单子模式(SINGLETON)的简单实现
- >>Singleton模式挺好的
- Singleton模式
- VB.NET实现Singleton模式
- 设计模式(4)-单例模式(Singleton)
- Windows XP系统八种启动模式详解
- 设计模式之-----单件(singleton)