JavaScript设计模式-单例模式(3)

简介: JavaScript设计模式-单例模式(3)

单例模式又称单体模式,单例模式指的是一个构造函数一生只能有一个实例对象,无论对构造函数使用多少次new关键字,都只会有一个实例

单例模式的应用场景


单例设计模式的应用场景,比如应用自定义弹出层和登录框

非单例模式


// 声明一个构造函数 
    function Structure(){
       this.num=1;
    }
    // 使用new关键字创建实例
    let a=new Structure();
    let b=new Structure();
    // 对比俩个实例是否相等
    console.log(a===b);

此时通过new关键字创建的俩个实例不相等,是因为通过new关键字创建出来的是一个对象,对象之间对比的是内存地址,a和b是俩个实例,内存地址不一样,所以不相等

这个在一般情况下是我们所期望的,但是在某些时候,我们期望他们共用一个实例

单例模式


我们在某些特殊场景,只希望共用一个实例,我们在创建实例时,先去看看该构造函数是否创建过实例,创建过实例的情况下,就读取缓存下来的实例对象并返回,如果没有创建就直接创建并缓存下这个对象,这里的重点就在第一次缓存下来的对象

//我们这里需要声明一个变量,用于实例创建第一次时候的缓存
        let _unicode = null;
        // 创建函数
        function Structure() {
   // 判断_unicode是否为null,为null就是第一次创建,需要赋初始值在返回,不为null就直接返回当前的_unicode
            if (_unicode == null) {
                // 初始值
                _unicode = {
                    num: 1
                }
            }
            // 返回
            return _unicode;
        }
        let a = Structure();
        let b = Structure();
        console.log(a===b);

这个时候a和b都已经相等了,因为创建构造函数的时候,都会去查看当前缓存的对象是否存在,存在即返回,不存在则创建完进行缓存,这样就会让他们使用的都是同一个内存地址

这里还存在一个问题,就是a创建完,在创建b之前对缓存对象进行修改,就会导致a和b是不同的存储位置,也会造成不相等的情况,这样不安全,我们现在要进行修改,我们这里可以通过闭包的方式把缓存对象变成私有属性,外部无法修改

let Structure = ( // 创建函数
            function () {
                //缓存对象
                let _unicode = null;
                // 返回一个函数行成闭包作用域
                return function () {
                    if (_unicode == null) {
                        // 初始值
                        _unicode = {
                            num: 1
                        }
                    }
                   return _unicode;
                }
            })();
        let a = new Structure();
        let b = new Structure();
        console.log(a === b);

通过闭包的特性,实现了私有化属性,如果在a创建完,b创建之前去修改缓存对象,将会报错,因为缓存对象属于构造函数私有的,我们外部访问不到,这样就杜绝了能够在外部修改缓存对象,创建多个实例的问题,目前由于采用了闭包,缓存对象在私有化作用域中,所以无法通过外部修改,a和b存储数据的位置也不会发生更改,这样就实现了一个单例模式

坚持努力,无惧未来!

相关文章
|
2月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
29 2
|
7天前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
13 2
|
21天前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
29 4
|
1月前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
|
13天前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
|
1月前
|
设计模式 存储 数据库连接
PHP中的设计模式:单例模式的深入理解与应用
【10月更文挑战第22天】 在软件开发中,设计模式是解决特定问题的通用解决方案。本文将通过通俗易懂的语言和实例,深入探讨PHP中单例模式的概念、实现方法及其在实际开发中的应用,帮助读者更好地理解和运用这一重要的设计模式。
19 1
|
21天前
|
设计模式 安全 Java
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
Kotlin教程笔记(57) - 改良设计模式 - 单例模式
23 0
|
2月前
|
设计模式 存储 数据库连接
PHP中的设计模式:单例模式的深入解析与实践
在PHP开发中,设计模式是提高代码可维护性、扩展性和复用性的关键技术之一。本文将通过探讨单例模式,一种最常用的设计模式,来揭示其在PHP中的应用及优势。单例模式确保一个类仅有一个实例,并提供一个全局访问点。通过实际案例,我们将展示如何在PHP项目中有效实现单例模式,以及如何利用这一模式优化资源配置和管理。无论是PHP初学者还是经验丰富的开发者,都能从本文中获得有价值的见解和技巧,进而提升自己的编程实践。
|
2月前
|
设计模式 安全 Java
C# 一分钟浅谈:设计模式之单例模式
【10月更文挑战第9天】单例模式是软件开发中最常用的设计模式之一,旨在确保一个类只有一个实例,并提供一个全局访问点。本文介绍了单例模式的基本概念、实现方式(包括饿汉式、懒汉式和使用 `Lazy<T>` 的方法)、常见问题(如多线程和序列化问题)及其解决方案,并通过代码示例详细说明了这些内容。希望本文能帮助你在实际开发中更好地应用单例模式,提高代码质量和可维护性。
46 1
|
2月前
|
设计模式 缓存 数据库连接
探索PHP中的设计模式:单例模式的实现与应用
在PHP开发中,设计模式是提高代码可复用性、可维护性和扩展性的重要工具。本文将深入探讨单例模式(Singleton Pattern)的基本概念、在PHP中的实现方式以及实际应用场景。单例模式确保一个类仅有一个实例,并提供全局访问点。通过具体代码示例和详细解释,我们将展示如何在PHP项目中有效利用单例模式来解决实际问题,提升开发效率和应用性能。