JavaScript 进阶营程序员

JavaScript设计模式-单体模式

2019-01-08  本文已影响0人  Danile_1226

你将了解一种设计模式-单体模式!
你将了解单体模式的优点!

单体模式

单体模式的思想在于保证一个特定类仅有一个实例。这意味着当您第二次使用同一个类创建新对象的时候,应该得到与第一次所创建对象完全相同对象。

如何将这种模式模式应用到 JavaScript ?在 JavaScript 中没有类,只有对象。实际上当创建一个新对象时,此新对象已经是单体了。

创建一个新对象(单体)例子 :

var person = {
    name : 'Danile',
};

但在 JavaScript 中,对象之间永远不会完全相等,除非它们是同一个对象,哪怕创建一个具有完全相同成员但同类对象,它也不会与第一个对象完全相同。例如:

var person2 = {
    name : 'Danile',
};

person === person2  // false
person == 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文件的时候,由于每个人的变量命名不同,很大程度上会发生变量覆盖的情况,而用单体模式,把变量保存在对象中,很好的避免了这一点。

第二个优点:提高代码的阅读性,维护性
使用单体模式,每个方法都被封装在对象中,而且每个方法只做一件事,所在在后期代码维护上,只需要维护特定位置的代码就可以了。

第三个优点:可以实例化,但只能实例化一次

上一篇 下一篇

猜你喜欢

热点阅读