likes
comments
collection
share

设计模式中最最最简单常见的单例模式

作者站长头像
站长
· 阅读数 50

前言

我们知道这世界上没有两片一模一样的树叶,就像在JavaScript中没有两个一模一样的对象,除非他们的引用地址相同,今天我们要聊的就是用单例模式创建两个一模一样的对象。

单例模式

单例模式是一种常用的设计模式,确保一个类只有一个实例存在,并提供一个全局访问点来获取该实例,通过这个访问点返回的对象始终是那一个对象,也就相等了。在JavaScript中它不是真正严格意义上的单例模式,因为JavaScript是一门非正规意义上的面向对象的语言。但是还是拥有单例模式身上的主要特点和功能。

实现方法

我们通过一个方法将实例对象返回出去,我们只需要调用该方法就能创建一个实例对象,如果已经创建过了,那么直接返回创建过的对象,如果没有那就新创建一个对象。核心在于用什么来存放这个实例对象,只不过是调用方式不同而已,当然不同的调用方式带来的使用也不一样。

方式一:构造函数法

这个方法我们将这个实例对象存放在构造函数身上。

class Person{
    static getInstance(){
        if(!Person.instance){
            Person.instance = new Person()
        }
        return Person.instance;
    }
}
let p1 = Person.getInstance()
let p2 = Person.getInstance()

console.log(p1===p2);

方式二:闭包法

这个方法我们将实例对象用闭包的形式存放。

class Person{
    static getInstance(){
        let instance = null
        return function(){
            if(!instance){
                instance = new Person()
            }
            return instance;
        }
    }
}
let simple = Person.getInstance()
let p1 = simple()
let p2 = simple()

console.log(p1===p2);

优缺点

优点

  • 提供全局访问点:单例模式提供了一个全局访问点,可以方便地访问和管理单例对象。
  • 节省内存:由于只有一个实例存在,因此可以节省内存空间,特别是在需要频繁创建和销毁对象的情况下。
  • 提高性能:通过延迟初始化,可以在需要时才创建实例,从而提高性能。
  • 方便管理资源:可以更好地管理全局资源比如弹窗(登录框,信息提升框)购物车,配置信息、日志记录等。

缺点

  • 缺乏灵活性:单例模式限制了实例的数量为一个,可能不适合需要多个实例的情况。
  • 隐藏依赖关系:使用单例模式可能会隐藏对象之间的依赖关系,使得代码更难以理解和维护。
  • 测试困难:由于单例模式的实例是全局唯一的,可能会导致测试困难,特别是在需要进行单元测试的情况下。

总结

今天我们聊了什么是单例模式,他是常见设计模式中的一种,它保证了全局下只有一个实例对象存在。两种常见的实现方法,分别将实例对象存于构造函数身上和闭包身上,以及单例模式的优缺点。

转载自:https://juejin.cn/post/7375072812847890442
评论
请登录