当前位置: 首页 > news >正文

前端设计模式基础笔记

        前端设计模式是指在前端开发中经常使用的一些解决问题的模式或思想。它们是经过实践证明的最佳实践,可以帮助我们更好地组织和管理我们的代码。

一、单例模式(Singleton Pattern)

        单例模式是一种创建型模式,它保证一个类只有一个实例,并提供一个全局访问点。在前端开发中,单例模式常用于管理全局状态和共享资源。例如,我们可以使用单例模式来实现一个全局的状态管理器,用于存储和管理应用程序的状态信息。

        实现单例模式的关键在于将构造函数设置为私有,禁止外部直接创建实例。同时,我们需要提供一个静态方法来获取单例实例,该方法会判断实例是否已经存在,如果不存在则创建一个新的实例。

        单例模式中Class的实例个数最多为1。当需要一个对象去贯穿整个系统执行某些任务时,单例模式就派上了用场。而除此之外的场景尽量避免单例模式的使用,因为单例模式会引入全局状态,而一个健康的系统应该避免引入过多的全局状态。

作用:确保一个类只有一个实例,并提供全局访问点。

实现方式:使用一个私有变量来存储唯一的实例,通过一个公共的静态方法来获取实例。

示例:在前端开发中,可以使用单例模式来创建一个全局状态管理器,用于管理应用程序的状态。

二、工厂模式(Factory Pattern)

        工厂模式是一种创建型模式,它定义了一个用于创建对象的接口,但是让子类决定实例化哪个类。通过工厂方法来创建对象,避免在代码中直接使用new操作符,从而使代码更加灵活和可维护。在前端开发中,工厂模式常用于创建UI组件和Ajax请求对象等。

        工厂模式可以分为简单工厂模式、工厂方法模式和抽象工厂模式。简单工厂模式是最基础的工厂模式,它由一个工厂类负责创建所有的产品实例。工厂方法模式是在简单工厂模式的基础上,将工厂类抽象成一个接口,让子类实现具体的工厂方法。抽象工厂模式是在工厂方法模式的基础上,将工厂接口抽象成一个抽象工厂接口,让子类实现具体的产品族工厂。

作用:通过工厂类创建对象,隐藏对象的创建逻辑。

实现方式:定义一个工厂类,根据不同的条件创建不同的对象,并返回统一的接口。

示例:在前端开发中,可以使用工厂模式来创建不同类型的组件,根据参数的不同返回相应的组件实例。

三、观察者模式(Observer Pattern)

        观察者模式是一种行为型模式,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,当一个对象的状态发生改变时,所有依赖于它的对象都会被通知并自动更新。当主题对象发生变化时,它会通知所有的观察者对象,让它们更新自己的状态。

        在前端开发中,观察者模式常用于实现事件系统。例如,我们可以定义一个事件主题对象,让多个事件监听器对象监听该主题对象。当主题对象触发事件时,它会通知所有的监听器对象执行相应的处理函数。

作用:定义一种一对多的依赖关系,当一个对象状态改变时,所有依赖它的对象都会得到通知并自动更新。

实现方式:定义一个主题(Subject)和多个观察者(Observer),主题维护观察者的列表,当主题的状态改变时,通知观察者进行更新。

示例:在前端开发中,可以使用观察者模式来实现事件的监听和响应,当某个事件触发时,通知所有注册的观察者进行相应的处理。

四、原型模式(Prototype Pattern)

        原型模式是一种创建型设计模式,它通过复制现有对象来创建新对象,而无需依赖具体类。原型模式可以帮助我们在运行时动态地创建对象,避免了使用传统的实例化方式,从而提高了对象的创建效率。

作用:通过复制现有对象来创建新对象,避免了创建大量相似对象的开销。

实现方式:通过克隆现有对象,创建一个新的对象实例,避免了使用构造函数创建对象。

示例:在前端开发中,可以使用原型模式来创建复杂的对象或组件,提高性能和可维护性。

五、装饰器模式(Decorator Pattern)

        装饰器模式是一种结构型模式,它允许动态地向一个对象添加额外的功能,而不需要修改对象的结构通过包装一个对象来扩展其功能,而不是通过继承来实现。这种模式可以使代码更加灵活和可扩展。在前端开发中,装饰器模式常用于添加日志、缓存、性能监控等功能。

        装饰器模式可以分为类装饰器和方法装饰器。类装饰器用于装饰类,它可以添加静态和实例方法、属性和元数据。方法装饰器用于装饰方法,它可以添加参数、返回值和元数据等。

作用:动态地给对象添加额外的功能,不改变其原有结构。

实现方式:使用包装器(Wrapper)来包裹原有对象,并在其中添加新的功能。

示例:在前端开发中,可以使用装饰器模式来扩展或修改现有组件的功能,例如给按钮组件添加点击统计功能。

六、适配器模式(Adapter Pattern)

                适配器模式是一种结构型模式,它允许将不兼容的对象包装成兼容的对象,以满足客户端的需求。(将一个类的接口转换成客户端所期望的另一个接口,从而使原本不兼容的类可以一起工作。)在前端开发中,适配器模式常用于兼容不同的API接口和第三方库。

适配器模式可以分为类适配器模式和对象适配器模式。类适配器模式使用继承来实现适配器,它可以将适配器对象和被适配对象的接口进行统一。对象适配器模式使用组合来实现适配器,它可以在适配器对象中保存被适配对象的引用,并将其接口进行转换。

作用:将一个类的接口转换成客户端所期待的另一种接口,使得原本不兼容的类可以一起工作。

实现方式:创建一个适配器类,实现客户端期望的接口,并在内部使用原有类的方法实现适配。

示例:在前端开发中,适配器模式可用于将不同框架或库之间的差异进行适配,以便于更好地整合使用。

七、策略模式(Strategy Pattern)

        策略模式是一种行为型模式,它定义了一系列算法,并将每个算法封装起来,使得它们可以互换,并在运行时根据需要选择相应的策略来解决问题。在前端开发中,策略模式常用于处理表单验证、排序和过滤等问题。

        策略模式由三个部分组成:策略类、上下文类和客户端类。策略类封装了具体的算法,上下文类负责调用策略类的算法,客户端类负责创建上下文类并设置具体的策略类。

作用:定义一系列的算法,将其封装成独立的策略类,使得它们可以相互替换。

实现方式:将每个策略算法封装在独立的类中,并通过一个上下文类来调用不同的策略。

示例:在前端开发中,策略模式可用于根据不同的用户角色选择不同的权限验证策略。

八、MVC模式(Model-View-Controller Pattern)

        MVC模式将应用程序分为三个部分:模型、视图和控制器。模型负责处理数据,视图负责呈现数据,控制器协调模型和视图之间的交互。

作用:将应用程序分为三个组件:模型(Model)、视图(View)和控制器(Controller)。

实现方式:模型负责处理数据和业务逻辑,视图负责展示数据,控制器负责处理用户输入和控制流程。

示例:在前端开发中,MVC模式可用于将界面逻辑和业务逻辑分离,提高代码的可读性和可维护性。

九、MVVM模式(Model-View-ViewModel Pattern)

        MVVM模式是MVC模式的一种变体,将控制器改为视图模型。视图模型负责处理用户界面和业务逻辑之间的交互。

作用:在MVVM模式中,视图(View)负责展示数据和接收用户操作,模型(Model)表示应用程序的数据和业务逻辑,ViewModel则处理视图和模型之间的交互。

实现方式:使用数据绑定技术,将视图和模型进行绑定,使得数据的变化能够自动反映到视图上,同时将用户操作映射到相应的模型操作。

示例:在前端开发中,MVVM模式可用于实现数据驱动的界面开发,简化复杂的DOM操作。

(图片来自网络,肯定不是小白自己做的啦!~)

相关文章:

前端设计模式基础笔记

前端设计模式是指在前端开发中经常使用的一些解决问题的模式或思想。它们是经过实践证明的最佳实践,可以帮助我们更好地组织和管理我们的代码。 一、单例模式(Singleton Pattern) 单例模式是一种创建型模式,它保证一个类只有一个…...

Python项目开发:Flask基于Python的天气数据可视化平台

目录 步骤一:数据获取 步骤二:设置Flask应用程序 步骤三:处理用户输入和数据可视化 步骤四:渲染HTML模板 总结 在这个数字化时代,数据可视化已经成为我们理解和解释信息的重要手段。在这个项目中,我们…...

Dell 服务器常见报错信息汇总

Dell 服务器常见报错汇总 如果有别的报错信息欢迎补充...

算法通关村-----贪心面试大热门之区间问题

判断区间是否重叠 问题描述 给定一个会议时间安排数组intervals,每个会议时间都包括开始时间和结束时间,intervals[i] [starti,endi],请你判断一个人是否能够参加这里面的全部会议。详见leetcode252 问题分析 先将会议安排数组按照开始时间排序&…...

OAK相机:自动或手动设置相机参数

OAK相机:自动或手动设置相机参数 硬件软件 硬件 使用硬件如下: 4✖️ov9782相机OAK-FFC-4P驱动板 硬件接线参考博主的一篇博客:OAK相机:多相机硬件同步拍摄 软件 博主使用的是Ubuntu18.04系统,首先配置所需的pytho…...

百家宴焕新上市,持续深耕100-300元价位段

执笔 | 尼 奥 编辑 | 古利特 4月8日,长江酒道曾在《百家宴谋划“晋级”之路,多措并举切分宴席市场“蛋糕”》一文中提到:“百家宴主力新品即将登场,市场政策灵活焕新。” 如今,百家宴新品及市场新政,正…...

Linux Debian12使用git将本地项目上传到码云(gitee)远程仓库

一、注册码云gitee账号 这个可以参考其他教程,本文不做介绍。 gitee官网:https://gitee.com/ 二、Linux Debian12安装git 如果Linux系统没有安装git,可以使用下面命令安装git sudo apt install git 三、gitee新建仓库 我这只做测试&…...

电子烟行业常用的英文表达

1. 电子烟的各种表达 a) 电子烟 i. Electronic-cigarette, ii. Electronic smoke, iii. electronic cigarettes iv. Electric cigarette, v. E-Cigarettes vi. e-cigarette, vii. e-Cig viii. E cigar,e-cigar 电子烟雪茄 2. 电子烟特指词汇及衍生 a) VAPE i. Vapo…...

【SpringMvc 丨跨域】

Spring MVC 支持跨域处理(CORS)。 CORS 简介处理CORS 过滤器CrossOrigin注解java配置xml配置 主页传送门:📀 传送 简介 跨域是指在浏览器的同源策略下,不能执行其他网站的脚本。它是由浏览器的安全限制造成的&#xf…...

【C语言】【strlen函数的使用与模拟实现】

1.strlen函数的使用和模拟实现 1.1使用&#xff1a; size_t strlen(const char* str)返回类型为无符号整型&#xff0c;参数是字符指针 计算的是字符串中到“\0"之前的字符个数 1.2模拟实现&#xff1a; 方法一&#xff1a;计数器式遍历 #include<stdio.h> #in…...

类和对象【基础概念】

全文目录 类的定义定义方式 类的访问限定符封装&#xff08;面向对象的三大特性之一&#xff09; 类对象模型类对象的存储方式类对象的大小计算 this指针this指针的特性**this指针可以为空吗&#xff1f;** 类的定义 在C中&#xff0c;C语言中的结构体struct中除了定义变量外还…...

如何测试生成式人工智能(AIGC)

简介&#xff1a;在人工智能日趋普及的今天&#xff0c;生成式人工智能&#xff08;AIGC&#xff09;已经成为不可忽视的一个分支。从自动化生成新闻、编写代码到图像和音频生成&#xff0c;AIGC几乎无处不在。但如何确保这些生成的内容达到预期标准、安全可靠&#xff0c;同时…...

机器学习算法详解3:逻辑回归

机器学习算法详解3&#xff1a;逻辑回归 前言 ​ 本系列主要对机器学习上算法的原理进行解读&#xff0c;给大家分享一下我的观点和总结。 本篇前言 ​ 本篇对逻辑回归的算法原理进行解读。 目录结构 文章目录 机器学习算法详解3&#xff1a;逻辑回归1. 引子2. sigmoid函数3. 原…...

linux命令集合

cd:切换文件路径 pwd:显示当前所处的路径 mkdir&#xff1a;创建目录比如mkdir test touch:创建一个空文件touch test.txt in:用于指定文件夹在另一个位置建立同步的链接in -s /lib/test1 /user/lj 在user目录下建立指向/lib/test1 目录的lj文件 cat:cat file(查看文件内…...

实现卓越供应链:RFID技术的革命性应用

在现代制造业中&#xff0c;供应链和物流的高效运作至关重要&#xff0c;它不仅影响着生产效率&#xff0c;还直接关系到企业的竞争力和客户满意度。为了应对这些挑战&#xff0c;越来越多的企业开始关注智能制造RFID智能设备&#xff0c;将其应用于供应链和物流管理&#xff0…...

从JVM角度看继承

从JVM角度看继承 最近重读了周志明老师的《深入理解JAVA虚拟机》一书&#xff0c;看完大有收获&#xff0c;但仍对继承情况下对象内存布局有所疑惑&#xff0c;所以查阅资料&#xff0c;结合本书进行分析 参考文档&#xff1a; 【深入理解JVM】&#xff1a;Java类继承关系中…...

基于Python和mysql开发的看图猜成语微信小程序(源码+数据库+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python和mysql开发的看图猜成语微信小程序&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都…...

Unity入门教程||创建项目(上)

一、介绍 目的&#xff1a;通过尝试制作一款使用玩家角色把小球弹飞的简单小游戏&#xff0c;熟悉使用Unity进行游戏开发的基本流程。 软件环境&#xff1a;Unity 2017.3.0f3&#xff0c;Visual Studio 2013 二、创建新项目 1&#xff0c;启动Unity后将出现一个并列显示Pro…...

Openbmc编译

1.网址的问题解决 原文 Modifying /conf/local.conf was the only solution that worked for me. Simply add one of the two options:#check connectivity using google CONNECTIVITY_CHECK_URIS "https://www.google.com/"#skip connectivity checks CONNECTIVI…...

美国CN2服务器速度怎么样

美国服务器以免备案、大带宽、性价比高的优势&#xff0c;多用于企业、电商、外贸、视频等个中大型网站建设。但是&#xff0c;因中美服 务器接口原因&#xff0c;导致某些服务器的网络并不稳定&#xff0c;这时候就会对美国服务器产品失望&#xff0c;解决这种问题的方法就是选…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek

文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama&#xff08;有网络的电脑&#xff09;2.2.3 安装Ollama&#xff08;无网络的电脑&#xff09;2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...