yizihan / blog

Record
1 stars 0 forks source link

JavaScript设计模式:单例模式 #5

Closed yizihan closed 6 years ago

yizihan commented 6 years ago

单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回;如果不存在就创建了再返回。这就确保了一个类只有一个实例对象。

在JavaScript中,我们常在管理命名空间时使用单例模式,它可以降低代码中创建全局变量的数量。

一个基本的单例模式

const Singleton = {
    attr: 'value',
    another_attr: 'another_value',
    method: function () {...},
    another_method: function () {...}
}

// Singleton是通过对象字面量创建的,无须实例化,并且这个对象仅此一个。
// 通过Singleton这个全局变量入口,访问它内部所有的方法和属性
Singleton.attr
Singleton.method

JavaScript命名空间

Singleton在JavaScript中的一种使用情形就是创建命名空间。 当通过使用命名空间把代码从全局作用域移动到一个单例中,可以避免全局变量被污染等其他问题。

const Namespace = {
    Util: {...},
    Ajax: {...},
}

实现代码

function Singleton () {
    // 判断是否存在实例
    if (typeof Singleton.instance === 'object') {
        return Singleton.instance;
    }
    // 其他内容
    this.start_time = 0;
    this.bang = 'Big';
    // 缓存
    Singleton.instance = this;
    // 隐式返回this
}
var single1 = new Singleton();
var single2 = new Singleton();
console.log(single1 === single2);   // true

【译】JavaScript设计模式:单例模式 深入理解JavaScript系列(25):设计模式之单例模式