你不知道的javascript设计模式(五)----单例模式

简介: 你不知道的javascript设计模式(五)----单例模式

前言

前几章我们一直在为javascript设计模式的学习作一些准备,我们学习了原型编程,闭包,封装以及高阶函数等内容,从这一章节开始,我们将正式开始设计模式的学习,作为设计模式学习的第一章,我们将从最简单的设计模式,单例模式开始设计模式的相关学习


正文

单例模式的定义

保证一个类有且只有一个实例,并提供一个访问它的全局访问点

上面是对单例模式的官方定义,单例模式是一个很常见的设计模式,比如最常见的浏览器中的window对象,那些在实际业务中有且仅有一个的对象就适合单例模式来创建

实现单例模式

要实现单例模式并不难,无非就是用一个变量来标志当前对象是否已经被创建,如果没被创建就新建一个对象,如果已经创建就返回之前已经创建的对象

javascript中的单例模式

上面的那种实现方式可能更多的是接近传统面向类编程的做法,但是javascript是一门无类语言,创建单例模式并不需要先定义一个类,再由这个类去定义对象,这样的做法无异于脱裤子放屁,我们只需要保证只是一个实例就是单例模式

在js开发中,我们经常把全局变量当作单例使用,当用这种方式创建的时候,全局变量便已经是独一无二的,但是这样的做法会有很多弊端,比如引起变量污染和覆盖的问题,在越大的项目中这个问题便会暴露得越明显。

在大型项目中为了解决这个问题,我们可以用专门的文件来存储这些单例对象,然后用接口把他们暴露出去,在对应的地方按需引入

640.png


惰性单例

惰性单例指的是在需要的时候才创建对象实例,惰性单例在单例模式中占很重要的地位,这个其实我们在文章开头就已经有所介绍,Singleton并不会在页面开始的时候就创建,而是在需要的时候主动调用getInstance时候才创建,不过我们也说了,javascript是一种无类语言,基于传统面向类的方式实现的单例模式对于javascript并不是最优选择。

假设我们需要写一个登陆的弹窗,并且在点击按钮以后,就弹出登陆的弹窗,这个是很适合使用单例模式来实现的,因为我们不会点登陆就一直创建新的登陆弹窗,弹窗只会有一个,这里我们基于js的全局变量去实现这个单例模式


通用的惰性单例

上个部分虽然我们用变量去创建了一个单例模式,但是这个单例模式是违反了单一职责原则的,创建单例和管理单例都在一个函数里,而且这个函数的复用能力很差,如果下一次我们需要创建一个frame的单例,我们不得不把上面的代码复制出来一份改动中间的部分去实现单例

上一节我们在讲高阶函数的时候,讲过将业务中易变的部分封装为函数作为参数,保留不变的业务逻辑的程序设计思想,根据这个思想,其实我们可以提取出上面那个函数共同的部分

640.png

接下来我们只需要把易变的那部分封装成函数再传入就可以了,这样如果有新的业务需求,我们并不需要更新getSingle方法,只需要封装新的业务函数传入单例模式就可以了,这样是符合开放-封闭原则的

小结

这一章我们介绍了单例模式,这是我们学习的第一个设计模式,这一章我们讲到了单例模式在基于类编程传统语言中的写法,以及在js中使用全局变量实现的方法,并且还总结了上一章的内容,设计函数的过程中要考虑这个函数的复用性,是否遵循开放-封闭原则,这一章还提到了单一职责原则,会在后面的章节专门说明

小伙伴们今天的学习就到这里了,如果觉得本文对你有帮助的话,欢迎转发,评论,收藏,点赞!!!

目录
相关文章
|
2月前
|
设计模式 存储 SQL
PHP中的设计模式:单例模式的探索
在PHP开发中,单例模式是一种常用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。本文将通过一个简单的例子,逐步引导你理解如何在PHP中实现和利用单例模式,以及它在实际项目中的应用价值。
|
7天前
|
设计模式 存储 安全
PHP中的设计模式:单例模式深度解析
在软件开发的广袤天地中,设计模式如同璀璨星辰,指引着程序员们解决复杂问题的方向。其中,单例模式以其独特的魅力,确保了一个类仅有一个实例,并提供了一个访问它的全局访问点,成为众多项目中不可或缺的设计智慧。本文旨在深入探讨PHP中单例模式的实现方式、应用场景及背后的哲理,引导读者思考其在现代软件架构中的重要性与运用策略。
23 5
|
12天前
|
设计模式 安全 Java
Java 编程中的设计模式:单例模式的深度解析
【9月更文挑战第22天】在Java的世界里,单例模式就像是一位老练的舞者,轻盈地穿梭在对象创建的舞台上。它确保了一个类仅有一个实例,并提供全局访问点。这不仅仅是代码优雅的体现,更是资源管理的高手。我们将一起探索单例模式的奥秘,从基础实现到高级应用,再到它与现代Java版本的舞蹈,让我们揭开单例模式的面纱,一探究竟。
23 11
|
8天前
|
设计模式 存储 缓存
PHP中的设计模式:单例模式的深入解析
在PHP开发中,设计模式是提高代码可维护性、扩展性和重用性的关键技术之一。本文将深入探讨PHP中的单例模式,包括其定义、实现方式、应用场景以及优缺点。通过对单例模式的全面剖析,帮助开发者更好地理解和应用这一设计模式,从而编写出更加高效和优雅的PHP代码。
|
8天前
|
设计模式 安全 Java
设计模式--单例模式Singleton
这篇文章详细介绍了单例模式Singleton的八种实现方式,包括饿汉式(静态常量和静态代码块)、懒汉式(线程不安全和线程安全的同步方法、同步代码块)、双重检查、静态内部类和枚举。每种方式都有详细的代码示例和优缺点说明,帮助理解单例模式的应用和选择适合的实现方法。
设计模式--单例模式Singleton
|
10天前
|
设计模式 SQL 安全
PHP中的设计模式:单例模式的深入探索与实践在PHP的编程实践中,设计模式是解决常见软件设计问题的最佳实践。单例模式作为设计模式中的一种,确保一个类只有一个实例,并提供全局访问点,广泛应用于配置管理、日志记录和测试框架等场景。本文将深入探讨单例模式的原理、实现方式及其在PHP中的应用,帮助开发者更好地理解和运用这一设计模式。
在PHP开发中,单例模式通过确保类仅有一个实例并提供一个全局访问点,有效管理和访问共享资源。本文详细介绍了单例模式的概念、PHP实现方式及应用场景,并通过具体代码示例展示如何在PHP中实现单例模式以及如何在实际项目中正确使用它来优化代码结构和性能。
|
12天前
|
设计模式 数据库连接 PHP
PHP中的设计模式:单例模式的深入解析与实践
在PHP开发中,设计模式是提高代码可维护性、扩展性和复用性的关键技术之一。本文将深入探讨单例模式——一种确保类只有一个实例,并提供该实例的全局访问点的设计模式。我们将从单例模式的基本概念入手,剖析其在PHP中的应用方式,并通过实际案例展示如何在不同场景下有效利用单例模式来优化应用架构。
|
2月前
|
设计模式 存储 负载均衡
【五】设计模式~~~创建型模式~~~单例模式(Java)
文章详细介绍了单例模式(Singleton Pattern),这是一种确保一个类只有一个实例,并提供全局访问点的设计模式。文中通过Windows任务管理器的例子阐述了单例模式的动机,解释了如何通过私有构造函数、静态私有成员变量和公有静态方法实现单例模式。接着,通过负载均衡器的案例展示了单例模式的应用,并讨论了单例模式的优点、缺点以及适用场景。最后,文章还探讨了饿汉式和懒汉式单例的实现方式及其比较。
【五】设计模式~~~创建型模式~~~单例模式(Java)
|
9天前
|
设计模式 Java 安全
Java设计模式-单例模式(2)
Java设计模式-单例模式(2)
|
2月前
|
设计模式 安全 程序员
C#设计模式之单例模式
C#设计模式之单例模式
41 3
下一篇
无影云桌面