JS:单例模式 —— 百度考题 (一)

简介: JS:单例模式 —— 百度考题 (一)

前言

今天我们来聊聊单例模式,在我们以往的文章中,我们讲过了代理模式,代理模式和单例模式都是设计模式的一种,感兴趣的小伙伴们可以先看看我的上篇文章,链接在此: 代理模式

设计模式是在软件设计中经常出现的一些问题的通用、可重用的解决方案。它们是经验丰富的开发人员为了解决特定类型的问题而提出的经过验证的设计思路。设计模式并不是一种可以直接的转化为代码的具体算法,而是描述问题和解决方案之间关系的抽象模型。

设计模式的主要目标是提供一种通用的、可重复使用的解决方案,帮助开发人员解决软件设计中常见的问题,提高代码的可维护性、可执行性和可扩展性。使用设计模式有助益于降低系统耦合度,使得代码更容易理解和维护。

单例模式

单例模式是一种设计模式,其目的是保证一个类只有一个实例,并提供一个全局访问点。这样可以防止重复实例化相同的对象,从而节省系统资源并保证一致性。

单例模式中提到了类,那么许多学习JavaScript不久的小伙伴们就懵了。什么?JS中还有类吗? 那么既然提到了类,我们就先来讲讲这个类吧

没错,在ES6出来之前,JavaScript中确实是没有类这个概念的。在JavaScript的类(class)出现之前,开发者主要使用构造函数之前和原型链的方式来实现面向对象编程。我们举个例子来看看:

  1. 构造函数: 构造函数是一种创建对象的特殊函数。通过new关键字调用构造函数可以创建对象,构造函数中的this关键字指向新创建的对象。
function Animal(name) {
    this.name = name;
    this.makeSound = function() {
        console.log("Some generic sound");
    };
}
const myAnimal = new Animal("Dog");
myAnimal.makeSound();
  1. 原型链继承: 对象通过原型链与其他对象连接在一起。在这种模式下,通过prototype属性定义方法构造函数,然后通过实例化__proto__

关于构造函数和原型在我之前的文章都有讲过,不太懂这些或者感兴趣的小伙伴可以翻阅看看,相信一定会对你们有帮助或者启发。

JavaScript有对象字面量和原型链可以用,为什么要引入类?

在JavaScript之后引入类(类),是为了提供一种更容易观察、更容易理解、更容易使用的面向对象编程的语法。在引入类之前,JavaScript使用原型链和构造函数来实现面向对象编程,这这种方式可能对初学者或来自其他对象的语言的开发者来说缺乏洞察力,语法也相对复杂。

引入类的主要目的包括:

  1. 更易理解的语法: 类提供了一种更接近传统针对对象语言的语法,如Java或C++。这种语言语法更容易理解,有助于降低学习成本,特别是对于那些已经熟悉其他对象的开发者说。
  2. 更容易使用的继承: 类引入了更简单和一致的继承模型。通过extends关键字实现继承,由此可知之前的继承链更容易理解。
  3. 更清晰的构造函数和方法定义: 类的构造函数和方法定义更清晰,不再需要显着的公式定义原型。这使得代码更容易阅读,简化了语音的代码。
  4. 更好的封装: 类提供了更好的封装性,使得数据和行为可以更轻松地组织在一起。通过constructormethod的定义,可以更清晰地看到类的结构。
  5. 更方便的静态方法: 引入了static关键字,可以更方便地定义静态方法,这些方法可以直接通过类调用,而无需创建类的实例。

说了这么多类的概念,让我们来看看什么是类,而类跟构造函数有什么区别:

class Person {
    // 构造函数
    constructor(name, age) {
        // 在构造函数中使用 this 存储属性
        this.name = name;
        this.age = age;
    }
    // 方法
    sayHello() {
        console.log(`Hello, my name is ${this.name} and I'm ${this.age} years old.`);
    }
}
// 创建类的实例
const person1 = new Person("Alice", 25);
const person2 = new Person("Bob", 30);
// 调用方法
person1.sayHello(); // 输出: Hello, my name is Alice and I'm 25 years old.
person2.sayHello(); // 输出: Hello, my name is Bob and I'm 30 years old.

类是一种抽象的概念,它提供了一种通用的模型,而对象是类的具体实例,具体体现了类的属性和行为。

给大家看一道题,来引出我们今天的主题单例模式:

class SingleDog{
    show() {
        console.log("我是一个单例对象");
    }
}
const s1 = new SingleDog()
const s2 = new SingleDog()
console.log(s1 === s2);

最后输出 true or false呢? 小伙伴们好好思考一下,下篇文章我们继续讲解单例模式。

总结

  • 类是一种抽象的概念,它提供了一种通用的模型,而对象是类的具体实例,具体体现了类的属性和行为。
  • 单例模式是一种设计模式,其目的是保证一个类只有一个实例,并提供一个全局访问点。这样可以防止重复实例化相同的对象,从而节省系统资源并保证一致性。

今天的内容就到这啦,如果你觉得小编写的还不错的话,或者对你有所启发,请给小编一个辛苦的赞吧

相关文章
|
7月前
|
前端开发 JavaScript
百度搜索:蓝易云【用JavaScript和HTML实现一个精美的计算器网页】
该计算器网页使用HTML定义了页面结构,CSS样式使其具有精美的外观,而JavaScript脚本实现了计算器的逻辑。用户可以通过按钮输入数字和操作符,并通过“=”按钮来进行计算,计算结果会显示在文本框中。
84 6
|
4月前
|
设计模式 存储 JavaScript
JS:单例模式 —— 百度考题 (二)
JS:单例模式 —— 百度考题 (二)
|
4月前
|
JavaScript 前端开发 定位技术
百度地图JavaScript API v2.0创建地图
百度地图JavaScript API v2.0创建地图
78 0
|
5月前
|
设计模式 JavaScript 前端开发
js设计模式【详解】—— 单例模式
js设计模式【详解】—— 单例模式
33 1
|
7月前
|
JavaScript 定位技术 API
[JS]百度地图设置城市
[JS]百度地图设置城市
65 1
|
7月前
|
缓存 JavaScript
js_单例模式制作无限弹窗(3s内销毁)
js_单例模式制作无限弹窗(3s内销毁)
56 0
|
7月前
|
JavaScript Ubuntu 前端开发
百度搜索:蓝易云【ubuntu安装开发javascript ubuntu script教程】
现在,你已经在Ubuntu上成功安装了JavaScript开发环境,可以开始编写和运行JavaScript代码了。注意,在编写代码之前,建议先创建一个项目文件夹,并在其中初始化npm,这样你可以管理项目的依赖项和配置。
72 5
|
7月前
|
设计模式 存储 JavaScript
js设计模式之单例模式
js设计模式之单例模式
78 7
|
7月前
|
存储 JavaScript Linux
百度搜索:蓝易云【CentOS 8上使用NVM安装特定版本的Node.js教程】
现在,你已成功安装和切换到特定版本的Node.js。希望这个教程能够帮助你在CentOS 8上使用NVM安装特定版本的Node.js。
140 2
|
7月前
|
JavaScript 关系型数据库 MySQL
百度搜索:蓝易云【Node.js写接口连接MySQL数据库教程】
现在,你的Node.js应用已经启动,可以通过访问 `http://localhost:3000/users`来获取所有用户的信息。注意替换上述代码中的数据库连接信息为你自己的实际数据。
92 0
下一篇
DataWorks