返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript单例模式能不能去实例只留单原理解析
  • 427
分享到

JavaScript单例模式能不能去实例只留单原理解析

JavaScript单例模式去实例JavaScript单例模式 2022-12-22 12:12:29 427人浏览 独家记忆
摘要

目录一、单例模式的分类二、惰性单例模式二、普通单例模式总结一、单例模式的分类 一个环境中有且只有一个实例,并且当前环境可以访问到它。往小了说,当前环境可以是一个函数作用域、块级作用

一、单例模式的分类

一个环境中有且只有一个实例,并且当前环境可以访问到它。往小了说,当前环境可以是一个函数作用域、块级作用域,往大了说可以是全局window或者global环境。如果按照实例的创建时机进行单例模式的分类,有:

  • 普通单例模式:在环境初始时就创建
  • 惰性单例模式:在某个特定的时机才创建

二、惰性单例模式

从单例模式的定义出发,一个环境中有且只有一个实例,并且使用时才去创建它,那么就可以把当前单例模式称之为惰性单例模式

  • 惰性,指的是只有在使用的时候才去创建
  • 单例,指的是当前环境有且只有单一的一个实例

弹窗案例:在页面打开的时候,页面中有登录按钮,在点击时,需要创建一个dom节点。
(1)首先,实现一个功能函数:创建节点的函数

var domFun = function () {
    var dom = document.createElement('div');
    dom.innerhtml = '登录窗口demo'
    dom.style.display = 'none';
    document.body.appendChild(dom);
    return dom;
}

(2)其次,创建管理单例的函数

var createSingle = function (fn) {
    var result;
    return function () {
        return result || (result = fn.apply(this, arguments));
    }
}

采用闭包的形式,让result变量在当前环境不销毁,如果该变量已经存在,直接返回,如果没有,让当前环境调用fn功能函数,并赋值给result。该过程保证了当前环境只有一个实例。
(3)将创建节点的函数和管理单例的函数糅合

var createSingleDom = createSingle(domFun)

(4)最后,在点击按钮的时候,进行实例的创建

var loginBtn = document.querySelector('.login')
loginBtn.onclick = function () {
    var loginDom = createSingleDom()
    console.log(loginDom)
    loginDom.style.display = 'block'
}

该过程实现了只有在点击登录按钮的时候才创建节点,是惰性的。

整个过程,将创建惰性实例的过程进行了分解,更易于修改和维护,如果,创建的不是div节点,而是,image图片、iframe嵌套网页、倒计时等其他内容,只需要替换步骤(1)中的内容即可。

这里的例子,我们严格的强调一个实例的事儿。

二、普通单例模式

Vue中的应用:我们知道vue是一个渐进式框架,主要实现视图的渲染,其他的功能可以可以通过第三方插件按需引入,比如路由插件vue-router和全局状态管理vuex

  • 路由vue-router的使用
import Vue from "vue";
import VueRouter from "vue-router";
Vue.use(VueRouter);
  • 状态vuex的使用
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);

vue通过Vue.use(Vuex)的方式进行vue-routervuex的安装,Vue.use的代码如下:

Vue.use = function (plugin: Function | Object) {
    const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))
    if (installedPlugins.indexOf(plugin) > -1) {
      return this
    }
    // 去掉参数列表中的第一个
    const args = toArray(arguments, 1)
    // 将Vue作为this推入到参数的首位
    args.unshift(this)
    if (typeof plugin.install === 'function') {
      plugin.install.apply(plugin, args)
    } else if (typeof plugin === 'function') {
      plugin.apply(null, args)
    }
    installedPlugins.push(plugin)
    return this
}

可以看出,首次执行vue.use(xxx)的时候,会将该插件推入到数组installedPlugins中去,再次执行vue.use(xxx)的时候,installedPlugins.indexOf(plugin) > -1true,则终止后续逻辑的执行。也就说,vue.use(xxx)只会让该插件执行一次install的安装。

再看 const installedPlugins = (this._installedPlugins || (this._installedPlugins = [])),是不是发现,这里也是单例模式的影子,当this._installedPlugins不存在时为其赋值为[],当前存在时直接返回。

单例模式,去掉具体的例,就剩单模式。就像当前例子中,install只执行一次,this._installedPlugins只初始化一次一样,就体现了一个单字。那这算不算单(例)模式呢?

总结

单例模式是不是可以去实例,只留单呢?这样,很多只执行一次的逻辑也就和单例模式能搭上关系了。仁者见仁智者见智,能不能去,纯属个人想法。因为,优秀的单例模式,是经过无数的程序案例得出的经验性汇总。

以上就是javascript单例模式能不能去实例只留单原理解析的详细内容,更多关于JavaScript单例模式去实例的资料请关注编程网其它相关文章!

--结束END--

本文标题: JavaScript单例模式能不能去实例只留单原理解析

本文链接: https://lsjlt.com/news/175530.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript单例模式能不能去实例只留单原理解析
    目录一、单例模式的分类二、惰性单例模式二、普通单例模式总结一、单例模式的分类 一个环境中有且只有一个实例,并且当前环境可以访问到它。往小了说,当前环境可以是一个函数作用域、块级作用...
    99+
    2022-12-22
    JavaScript单例模式去实例 JavaScript单例模式
  • Java 实例解析单例模式
    目录单例模式的介绍优点缺点SynchronizedSynchronized示例Synchronized与非SynchronizedSingleton第一个示例第二个示例第三个示例第四...
    99+
    2024-04-02
  • 详解Java单例模式的实现与原理剖析
    目录一、什么是单例模式二、哪些地方用到了单例模式三、单例模式的优缺点优点缺点四、手写单例模式饿汉式枚举饿汉式DCL懒汉式双检锁懒汉式内部类懒汉式小结一、什么是单例模式 单例模式(Si...
    99+
    2024-04-02
  • Java单例模式与破坏单例模式概念原理深入讲解
    目录什么是单例模式饿汉式(预加载)懒汉式(懒加载)反射破坏单例模式什么是单例模式 经典设计模式又分23种,也就是GoF 23 总体分为三大类: 创建型模式结构性模式行为型模式 Jav...
    99+
    2023-02-21
    Java单例模式 Java破坏单例模式
  • 理解JavaScript设计模式中的单例模式
    单例模式(Singleton Pattern)是最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 单例模式涉及到一个单一的类,该类负责创建自己...
    99+
    2024-04-02
  • 一文理解JavaScript中的单例模式
    JS 单例模式是一种常用的设计模式,它可以保证一个类只有一个实例。这种模式主要用于管理全局变量,避免命名冲突和重复加载,同时也可以减少内存占用,提高代码的可维护性和可扩展性。价值场景JS 单例模式通常适用于以下场景:管理全局变量使用单例模式...
    99+
    2023-05-14
    单例模式 前端 JavaScript 面试
  • 解析Javascript设计模式Revealing Module 揭示模式单例模式
    目录1. Revealing Module 揭示模式2. Singleton 单例模式1. Revealing Module 揭示模式 该模式能够在私有范围内简单定义所有的函数和变量...
    99+
    2024-04-02
  • 利用C++单例模式实现高性能配置管理器
    代码中,使用了单例模式来创建配置管理器对象,保证了整个程序中只有一个配置管理器对象。配置管理器中包含了配置项数组、配置项数量、互斥锁等成员,通过这些成员来实现配置文件的读取和配置项的...
    99+
    2023-05-16
    C++单例模式实现高性能配置管理器 C++ 配置管理器 C++ 单例模式
  • JAVA 枚举单例模式及源码分析的实例详解
    JAVA 枚举单例模式及源码分析的实例详解      单例模式的实现有很多种,网上也分析了如今实现单利模式最好用枚举,好处不外乎三点:线程安全不会因为序列化而产生新实例防止反射攻击但是貌似没...
    99+
    2023-05-31
    java 枚举 单例
  • PHP单例模式的原理及实现方法是什么
    本篇内容介绍了“PHP单例模式的原理及实现方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!单例模式Singleton Pattern...
    99+
    2023-07-05
  • java实现简单解析XML文件功能示例
    本文实例讲述了java实现简单解析XML文件功能。分享给大家供大家参考,具体如下:package demo;import java.io.File;import java.io.IOException;import javax.xml.pa...
    99+
    2023-05-31
    java 解析 xml
  • java 单例的五种实现方式及其性能分析
    java 单例的五种实现方式及其性能分析序言在23种设计模式中,单例是最简单的设计模式,但是也是很常用的设计模式。从单例的五种实现方式中我们可以看到程序员对性能的不懈追求。下面我将分析单例的五种实现方式的优缺点,并对其在多线程环境下的性能进...
    99+
    2023-05-31
    java 单例 ava
  • C++使用智能指针实现模板形式的单例类
    本文通过实例为大家分享了C++使用智能指针实现模板形式的单例类的具体代码,供大家参考,具体内容如下 实现一个模板形式的单例类,对于任意类型的类经过Singleton的处理之后,都能获...
    99+
    2024-04-02
  • JS基于设计模式中单例模式实现封装对数据增删改查功能的示例分析
    这篇文章给大家分享的是有关JS基于设计模式中单例模式实现封装对数据增删改查功能的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。单例模式单例模式的核心结构中只包含一个被称为...
    99+
    2024-04-02
  • 单例模式在高并发环境下的性能优化实践
    随着互联网的不断发展,高并发的应用场景越来越普遍。在这样的应用场景下,性能优化成为了一个重要的课题。而单例模式作为一种常见的设计模式,在高并发环境下也需要进行性能优化,以保证系统的稳定性和响应速度。单例模式是一种创建型的设计模式,它保证一个...
    99+
    2023-10-21
    性能优化 单例模式 高并发
  • C++单例模式实例化一个对象不全部使用static的原因是什么
    今天小编给大家分享一下C++单例模式实例化一个对象不全部使用static的原因是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一...
    99+
    2023-06-30
  • 单例模式在PHP中的最佳实践与性能优化技巧
    一、引言在PHP开发中,单例模式是一种常用的设计模式。它的主要目的是确保一个类只有一个实例,并且提供一个全局访问点。在某些情况下,使用单例模式可以使代码更加简洁和高效。然而,使用不当或者实现不当的单例模式可能会导致性能问题。本文将介绍单例模...
    99+
    2023-10-21
    技巧 实践 PHP 性能优化 单例模式
  • mysql滑动订单问题原理与解决方法实例分析
    本文实例讲述了mysql滑动订单问题原理与解决方法。分享给大家供大家参考,具体如下: 先根据以下代码来创建表MonthlyOrders并导入一定的数据 CREATE TABLE MonthlyOrder...
    99+
    2024-04-02
  • C# 实例解释面向对象编程中的单一功能原则(示例代码)
    在面向对象编程领域中,单一功能原则(Single responsibility principle)规定每个类都应该有且仅有一个单一的功能,并且该功能应该由这个类完全封装起来。 在面...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作