说到单例设计模式,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都是单线程的,因此并不像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