JavaScript设计模式-单体模式
你将理解一种设计模式-单体模式!
你将理解单体模式的优点!
单体模式
单体模式的思想在于保证一个特定类仅有一个实例。这意味着当您第二次使用同一个类创立新对象的时候,应该得到与第一次所创立对象完全相同对象。
如何将这种模式模式应用到 JavaScript ?在 JavaScript 中没有类,只有对象。实际受骗创立一个新对象时,此新对象已经是单体了。
创立一个新对象(单体)例子 :
var person = { name : 'Danile',};
但在 JavaScript 中,对象之间永远不会完全相等,除非它们是同一个对象,哪怕创立一个具备完全相同成员但同类对象,它也不会与第一个对象完全相同。例如:
var person2 = { name : 'Danile',};person === person2 // falseperson == person2 // false
so~~在 JavaScript 创立一个对象的时候,实际上就是创立一个单体。
使用 new 操作符
JavaScript 中具备 new 语法可使用构造函数来创立对象,而且有时可能需要使用这种语法但单体实现。这种思想在于当使用同一个构造函数以 new 操作符来创立多个对象时,应该仅取得指向完全相同的对象的新指针。
var person1 = new person();var person2 = new person();person1 = person2; // true
person对象仅会在第一次调用构造函数时被创立。在第二次(以及第三次以后)创立时将会返回同一个person对象。这就是为什么 person1 === person2,由于它们本质上是指向同一个对象的两个引用。
JavaScript 中如何实现该模式?
- 可以使用全局变量来存储该实例。(不推荐)
- 可以在构造函数的静态属性中缓存该实例。(缺点在于某些属性是公开可访问的属性,在外部代码中可能会修改该属性,以至于会丢失该实例)
- 可以将该实例包装在闭包中。这样可以保证该实例的私有性并且保证该实例不会被构造函数以外的代码所修改。(缺点是带来了额外的闭包开销)
闭包中的实例
直接上代码:
function Universe() { // 缓存实例 var instance = this; // 缓存实例 this.start_time = 0; this.bang = "Big"; //重写该构造函数 Universe = function () { return instance ; };}// 测试var uni1 = new Universe();var uni2 = new Universe();uni1 === uni2; // true
由此可见,第一次调用原始构造函数时,它会像往常一样返回 this。依次类推,再次调用时,将执行重写的构造函数。
单体模式的优点
第一个优点:划分命名空间
当在做项目的时候,一定不是一个人在做,而是一伙人,当一个页面中包含多个js文件的时候,因为每个人的变量命名不同,很大程度上会发生变量覆盖的情况,而用单体模式,把变量保存在对象中,很好的避免了这一点。
第二个优点:提高代码的阅读性,维护性
使用单体模式,每个方法都被封装在对象中,而且每个方法只做一件事,所在在后期代码维护上,只要要维护特定位置的代码即可以了。
第三个优点:可以实例化,但只能实例化一次
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » JavaScript设计模式-单体模式