资讯专栏INFORMATION COLUMN

浅谈js单例模式

draveness / 993人阅读

摘要:单例模式说到单例设计模式,中经常使用的单例模式通常分两种,懒汉模式和饿汉模式懒汉模式简单写了下私有化构造函数在获取实例的方法中返回实例化对象虽然很多大佬都写过啦,但是小生为了加深记忆便再写一遍虽然实现了单例模式,但是未考虑到线程安全,多个线

java单例模式

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

懒汉模式

</>复制代码

  1. class singleDemo {
  2. private static demoTarget;
  3. privete singleDemo () {};
  4. public static singleDemo getInstance (data) {
  5. if (demoTarget === null) {
  6. demoTarget = new singleDemo()
  7. }
  8. return demoTarget
  9. }
  10. }

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

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

懒汉模式 (线程安全)

</>复制代码

  1. class singleDemo {
  2. private static demoTarget;
  3. privete singleDemo () {};
  4. public static synchronized singleDemo getInstance (data) {
  5. if (demoTarget === null) {
  6. demoTarget= new singleDemo()
  7. }
  8. return demoTarget
  9. }
  10. }
饿汉模式

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

</>复制代码

  1. class singleDemo {
  2. private static demoTarget = new singleDemo();
  3. private singleDemo () {};
  4. public static singleDemo getInstance (data) {
  5. return demoTarget
  6. }
  7. }

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

js单例模式

由于js都是单线程的,所以并不像java那样麻烦,并不需要考虑多线程情况,没错,只要能获取单例就行,废话不说,代码先上

</>复制代码

  1. let Single = (function () {
  2. function constructor () {}
  3. var instance;
  4. function getInstance(){
  5. if (!instance) {
  6. instance = new constructor()
  7. }
  8. return instance
  9. }
  10. return {
  11. getInstance: getInstance
  12. }
  13. })()
  14. const demo1 = Single.getInstance()
  15. const demo2 = Single.getInstance()
  16. console.log(demo1 === demo2) // true

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/96118.html

相关文章

  • 浅谈对JavaScript闭包的理解

    摘要:关于循环和闭包当循环和闭包结合在一起时,经常会产生让初学者觉得匪夷所思的问题。闭包是一把双刃剑是比较难以理解和掌握的部分,它十分强大,却也有很大的缺陷,如何使用它完全取决于你自己。 在谈闭包之前,我们首先要了解几个概念: 什么是函数表达式? 与函数声明有何不同? JavaScript查找标识符的机制 JavaScript的作用域是词法作用域 JavaScript的垃圾回收机制 先来...

    missonce 评论0 收藏0
  • 浅谈前端中的错误处理

    摘要:如何避免内存泄露内存泄漏很常见,特别是前端去写后端程序,闭包运用不当,循环引用等都会导致内存泄漏。有的时候很难避免一些可能产生内存泄漏的问题,可以利用每次调用都在一个沙箱环境下调用,用完回收调。 某一天用户反馈打开的页面白屏幕,怎么定位到产生错误的原因呢?日常某次发布怎么确定发布会没有引入bug呢?此时捕获到代码运行的bug并上报是多么的重要。 既然捕获错误并上报是日常开发中不可缺少的...

    ShowerSun 评论0 收藏0
  • 浅谈前端中的错误处理

    摘要:如何避免内存泄露内存泄漏很常见,特别是前端去写后端程序,闭包运用不当,循环引用等都会导致内存泄漏。有的时候很难避免一些可能产生内存泄漏的问题,可以利用每次调用都在一个沙箱环境下调用,用完回收调。 某一天用户反馈打开的页面白屏幕,怎么定位到产生错误的原因呢?日常某次发布怎么确定发布会没有引入bug呢?此时捕获到代码运行的bug并上报是多么的重要。 既然捕获错误并上报是日常开发中不可缺少的...

    BothEyes1993 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<