JS设计模式初探——单例模式

单例模式是一种常见设计模式,确保类只有一个实例并提供全局访问点。它用于命名空间管理、资源分享和唯一性需求,如任务管理器、数据库连接池和计数器等。通过检查实例是否存在来实现单例,避免内存浪费和命名冲突。例如,jQuery对象即为一个单例。使用单例模式可以控制内存消耗,保持系统有序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


title:设计模式之——单例模式
categories:tech
tag:[设计模式,编程]

模式名称

​ 所谓单例,即整个系统中只存在某个类的一个单一实例。

解决的问题(应用场景)

​ 单例模式是一种比较常见的设计模式,它也被应用在许多场景,它能够解决如下问题:

  • 命名空间管理:可以将一组有关联的属性和方法封装到一个单例中,方便命名管理,防止这些方法属性和其他类的实例的方法属性发生命名冲突。

  • 资源共享,由于有些实例的内存损耗比较大,一旦有多个实例,内存损耗就会非常严重,这时候,就可以使用单例模式来保证实例的唯一性,即每次调用和创建实例返回的都是内存中的同一个实例。

  • 保证实例的唯一性:有些实例整个系统中只能存在一个,否则会引起同步问题和操作冲突,这时就应该使用单例模式。

常见的应用场景:

  • windows的任务管理器就是一个单例,整个系统中只有这一个管理器实例,不可能有两个。(保证实例的唯一性)
  • jquery库的jquery包装对象本身就是一个单例。(命名空间管理)
  • 网站的计数器(资源共享)
  • 数据库连接池。(资源共享)
  • 操作系统的文件系统(保证实例的唯一性)

解决方案

​ 在实例化的时候检查是否已经存在该类的一个实例,如果存在,直接返回,如果不存在,才创建返回新实例。

代码示例(javascript):


 var Singleton = (function () {
    var instantiated;
    function init() {
        /*这里定义单例代码*/
        return {
            publicMethod: function () {
                console.log('hello world');
            },
            publicProperty: 'test'
        };
    }

    return {
        getInstance: function () {
            if (!instantiated) {
                instantiated = init();
            }
            return instantiated;
        }
    };
})();

/*调用公有的方法来获取实例:*/
Singleton.getInstance().publicMethod();
 
}

效果

​ 在不使用单例模式的情况下,对一个类实例化多次,内存中就会存在多个实例,损耗会非常大,使用了单例模式以后,内存中只存在该类的一个实例,损耗就在可控范围内。另外一方面,每一个单例有独立的命名空间,整个系统的命名系统也变得很有秩序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值