JavaScript设计模式之单例模式

简介: JavaScript设计模式之单例模式

JavaScript 设计模式 之旅

在这里插入图片描述

设计模式开篇

日常开发中,我们都很注重开发技巧,好的开发 技巧可以事半功倍得解决此刻得问题。

那么这些技巧如何来得呢?

我的理解: 经过不断踩坑,解BUG,总结出来一些处理对应问题解决方案,这就所谓的 技巧

说起设计模式,其实我们日常开始中也经常用到,只是你不知道用的解决方案方案对应的设计模式名称.

学习设计模式的作用

在软件设计中,模式是一些经过了大量实际项目验证的优秀解决方案。熟悉这些模式的程序员,对某些模式的理解也会自然的形成条件反射。当遇到合适的场景出现时,可以快速找到对应的模式来处理当前的问题。

单例模式

定义: 保证 类 仅有 一个实例,并可以全局访问这个实例.

全局变量 不是 单例模式,但是在JavaScript 中, 我们经常把单例模式当作全局变量使用。

因为它满足单例模式的两点:

  • 创建的全局变量是独一无二的
  • 它可以全局访问这个变量实例
// login.js
var loginInfo = {
     username: '',
    token: '',
    .......
}



//login.vue

import logins from './login.js'

logins.name =  this.username
但是它也有缺点,容易造成命名空间污染。

定义的全局变量多了, 会覆盖掉之前定义的全局变量,这样会造成不必要的BUG.

如何处理命名空间污染呢?

如何处理呢?

  • 1.使用命名空间
  • 2.使用闭包封装私有变量

命名空间

对象自变量的形式:
// login.js
export default var loginInfo = {
    names:'' ,
    token: '',
    setName: function (name) {
        this.names = name
    },
    getName: function () {
        return this.name
    }
}


//login.vue
import logins from './login.js'

logins.token =  this.token

使用闭包封装私有变量

把一些变量封装在闭包内部,只暴露一些接口跟外界通信。

外界是访问不到 内部定义的私有变量的,这样就避免了全局命令污染。

var user = (function () {
    //外界是访问不了 _name _age 
    var _name = '张三',
        _age = 22;
    
        return {
            //这块留给外界通信用
            getUserInfo: function () {
                console.log(`姓名为:${_name},年龄为:${_age}`) 
            }
        }
})()
                                                                                                                                              
user.getUserInfo()

通用的惰性单例模式

在该执行的情况下,执行操作步骤 / DOM.

优点: 节约了性能。

场景1
有时候,例如登陆弹窗,在加载首页的同时,它会渲染这个页的全部 DOM,如果首页DOM 内容多,加载速度也会相应的很慢,有很多不需要DOM提前渲染。

这时,可以通过惰性单例模式来解决此问题,例如单击了登陆按钮,才会创建登陆弹窗的DOM,并且记录此次点击状态,如果下次还要打开,只是更改 DOM 的 style display 属性即可。 这样节约了首页加载时间,提升页面性能。

// 定义全局通用单例模式
var getSingle = function (fn) {
    var result;
    return function () {
        return result || (result = fn.apply(this, arguments));
    }
}

// 创建登陆窗口
var createLoginLayer =  function() {
    var div = document.createElement('div')
    div.innerHTML = '登陆框'
    div.style.display = 'none'
    document.body.appendChild(div)
    return div
}

//  创建单例模式 登陆框
var createSingleLoginLayer =  getSingle(createLoginLayer);

document.getElementById('btn').onclick = () => {
    // 获取单例模式中 返回得登陆框
    var  loginLayer = createSingleLoginLayer();
    // 改变样式
    loginLayer.style.display = 'block'
}
场景2
创建唯一的 iframe 用于加载第三方页面
var createSingleIframe =  getSingle( function() {
    var iframe = document.createElement('iframe');
    document.body.appendChild(iframe)
    return iframe
})

document.getElementById('redirect').onclick = () => {
    var  iframeLayer = createSingleIframe();
    iframeLayer.src = 'http://www.baidu.com'
}
更多精彩内容,关注公众号: '前端自学社区',获取

本文内容如有错的地方,欢迎各位大佬指正,学习了😆

目录
相关文章
|
1月前
|
设计模式 存储 SQL
PHP中的设计模式:单例模式的探索
在PHP开发中,单例模式是一种常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。本文将通过一个简单的例子,逐步引导你理解如何在PHP中实现和利用单例模式,以及它在实际项目中的应用价值。
|
1月前
|
设计模式 存储 负载均衡
【五】设计模式~~~创建型模式~~~单例模式(Java)
文章详细介绍了单例模式(Singleton Pattern),这是一种确保一个类只有一个实例,并提供全局访问点的设计模式。文中通过Windows任务管理器的例子阐述了单例模式的动机,解释了如何通过私有构造函数、静态私有成员变量和公有静态方法实现单例模式。接着,通过负载均衡器的案例展示了单例模式的应用,并讨论了单例模式的优点、缺点以及适用场景。最后,文章还探讨了饿汉式和懒汉式单例的实现方式及其比较。
【五】设计模式~~~创建型模式~~~单例模式(Java)
|
21天前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
14 0
|
1月前
|
设计模式 安全 程序员
C#设计模式之单例模式
C#设计模式之单例模式
40 3
|
1月前
|
设计模式 JavaScript 前端开发
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
|
1月前
|
设计模式 存储 JavaScript
JS:单例模式 —— 百度考题 (二)
JS:单例模式 —— 百度考题 (二)
|
1月前
|
设计模式 JavaScript 前端开发
JS:单例模式 —— 百度考题 (一)
JS:单例模式 —— 百度考题 (一)
|
30天前
|
设计模式 SQL 缓存
Java编程中的设计模式:单例模式的深入理解与应用
【8月更文挑战第22天】 在Java的世界里,设计模式是构建可维护、可扩展和灵活的软件系统的基石。本文将深入浅出地探讨单例模式这一经典设计模式,揭示其背后的哲学思想,并通过实例演示如何在Java项目中有效运用。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇洞悉软件设计深层逻辑的大门。
26 0
|
1月前
|
设计模式 存储 数据库连接
Python设计模式:巧用元类创建单例模式!
Python设计模式:巧用元类创建单例模式!
32 0
|
1月前
|
设计模式 安全 测试技术
[设计模式]创建型模式-单例模式
[设计模式]创建型模式-单例模式