浅谈js单例模式

java单例模式

说到单例设计模式,Java中常用
java的单例模式一般分两种,懒汉模式和饿汉模式java

懒汉模式

class singleDemo {
    private static demoTarget;
    privete singleDemo () {};
    public static singleDemo getInstance (data) {
        if (demoTarget === null) {
           demoTarget = new singleDemo()
        }
        return demoTarget
    }
}

OK,简单写了下
1.私有化构造函数
2.在public获取实例的方法中返回实例化对象设计模式

(虽然不少大佬都写过啦,可是小生为了加深记忆便再写一遍)
虽然实现了单例模式,可是未考虑到线程安全,多个线程访问能可能建立多个实例,也就是高并发时候单例模式会建立多个实例,那要如何解决此类问题呢?
这时候有两种,一种是原来的懒汉模式借助synchronized变身成为线程安全的懒汉模式,另外一种则是饿汉模式安全

懒汉模式 (线程安全)

class singleDemo {
    private static demoTarget;
    privete singleDemo () {};
    public static synchronized singleDemo  getInstance (data) {
        if (demoTarget === null) {
            demoTarget= new singleDemo()
        }
        return demoTarget
    }
}

饿汉模式

什么是饿汉模式呢?就是在懒汉模式的基础加一层锁,能保证单例多线程

class singleDemo {
    private static demoTarget = new singleDemo();
    private singleDemo () {};
    public static singleDemo getInstance (data) {
        return demoTarget
    }
}

好啦,简单的把java经常使用的两种单例模式给写了下,???标题不是js的单例模式嘛?标题写错了?没写错,小生只是回忆一下java的知识,望各位大佬见谅
在js中如何实现单例呢?并发

js单例模式

因为js都是单线程的,因此并不像java那样麻烦,并不须要考虑多线程状况,没错,只要能获取单例就行,废话不说,代码先上函数

let Single = (function () {
        function constructor () {}
        var instance;
        function getInstance(){
            if (!instance) {
                instance = new constructor()
            }
            return instance
        }
        return {
            getInstance: getInstance
        }
    })()
    const demo1 = Single.getInstance()
    const demo2 = Single.getInstance()
    console.log(demo1 === demo2) // true
相关文章
相关标签/搜索