前端设计模式基础笔记

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

一、单例模式(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操作。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/133009.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql远程连接失败

先上结论,只提出最容易忽略的地方 服务器是阿里云、腾讯云等平台,平台本身自带的防火墙没有开启iptables规则中禁用了3306,即使你根本没有启用iptables服务 第二条是最离谱的 从这里可以看到,我服务器并未启用 iptables 服务 但…

Java8实战-总结24

Java8实战-总结24 用流收集数据收集器简介收集器用作高级归约预定义收集器 用流收集数据 流可以用类似于数据库的操作帮助你处理集合。可以把Java 8的流看作花哨又懒惰的数据集迭代器。它们支持两种类型的操作:中间操作(如filter或map)和终端操作(如count、findFir…

互联网医院App开发:构建医疗服务的技术指南

互联网医院App的开发是一个复杂而具有挑战性的任务,但它也是一个充满潜力的领域,可以为患者和医疗专业人员提供更便捷的医疗服务。本文将引导您通过一些常见的技术步骤来构建一个简单的互联网医院App原型,以了解该过程的基本概念。 技术栈选…

JWT 安全及案例实战

文章目录 一、JWT (json web token)安全1. Cookie(放在浏览器)2. Session(放在服务器)3. Token4. JWT (json web token)4.1 头部4.1.1 alg4.1.2 typ 4.2 payload4.3 签名4.4 通信流程 5. 防御措施 二、漏洞实例(webgoa…

【TCPDF】使用TCPDF导出PDF文件

目录 一、安装TCPDF类库 二、安装字体 三、使用TCPDF导出PDF文件 目的:PHP通过TCPDF类库导出文件为PDF。 开发语言及类库:ThinkPHP、TCPDF 效果图如下 一、安装TCPDF类库 在项目根目录使用composer安装TCPDF,安装完成后会在vendor目录下…

开发调试:提高代码质量与开发效率的关键步骤

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 引言 在现代软件开发中…

Element Plus中Cascader 级联选择器(选择任意一级选项 - 更改下拉框选中方式)

组件原始选中&#xff1a;选择文字前面的单选按钮 现在更改为&#xff1a;隐藏单选按钮&#xff0c;点击文字进行选中 ① 给弹出内容的自定义类名(popper-class)&#xff1a; <el-cascader v-model"areaValue":options"areaOptions" :props"areaP…

ubuntu 18.04 搭建isaacgym学习环境,并运行legged_gym

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、安装anaconda二、使用conda创建python版本为3.8的虚拟环境三、安装pytorch四、isaac-gym下载安装五、安装legged_gym总结 前言 系统&#xff1a;ubuntu18.…

IntelliJ IDEA使用_常规设置

文章目录 版本说明主题设置取消检查更新依赖自动导入禁止import xxx.*、允许import内部类显示行号、方法分割线、空格代码提示&#xff08;匹配所有字母&#xff09;自定义注释颜色添加头部注释自定义字体设置字符编码关联本地GitJDK编译版本Maven配置Tomcat配置代码注释设置头…

Jmeter系列-测试计划详细介绍(3)

测试计划的作用 测试计划描述了 Jmeter 在执行时&#xff0c;一系列的步骤一个完整的测试计划包含了一个或多个【线程组、逻辑控制器、采样器、监听器、定时器、断言和配置元素】 Jmeter原件和组件的介绍 基本元件的介绍 多个类似功能组件的 容器&#xff08;类似于类&…

.net 7 隐藏swagger的api

1.写一个隐藏接口特性表示 using Microsoft.AspNetCore.Mvc.ApiExplorer; using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen;using System.Web.Http.Description;namespace JiaTongInterface.Filter {public class SwaggerApi : Swashbuckle.AspNet…

Leetcode150. 逆波兰表达式求值

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给你一个字符串数组 tokens &#xff0c;表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意&#xff1a; 有效的算符为 、-、* 和 / 。每个操作数&a…

通过篡改cred结构体实现提权利用

前言 在之前的HeapOverflow文章中&#xff0c;作者还构造了任意地址读写的操作&#xff0c;使用了任意地址读写去进行提权&#xff0c;还挺有意思的&#xff0c;记录一下如何利用任意地址读写进行提权。 作者利用任意地址读写分别改写modprobe_path以及cred结构体去实现提权的…

自动化运维工具Ansible教程(一)【入门篇】

文章目录 前言Ansible 入门到精通入门篇进阶篇精通篇入门篇1. Ansible 简介2. 安装 Ansible1. 通过包管理器安装&#xff1a;2. 通过源码安装&#xff1a; 3. Ansible 的基本概念和核心组件4. 编写和运行第一个 Ansible Playbook5. 主机清单和组织结构主机清单组织结构 6. Ansi…

通过finalshell快速在ubuntu上安装jdk1.8

这篇文章主要介绍一下怎么通过finalshell连接ubuntu&#xff0c;然后在ubuntu上安装jdk1.8&#xff0c;让不熟悉linux操作系统的童鞋也能快速地完成安装。 目录 一、准备一台虚拟机 二、安装finalshell远程连接工具 三、获取ubuntu虚拟机的ip地址 四、通过finalshell连接u…

C语言 —— 初步入门知识(第一个C语言程序、数据类型、变量常量、字符与注释)

本篇文章介绍C语言的基础知识&#xff0c;使读者对C语言能够有一个大概的认识. 不会细写每一个知识点, 但是能够入门C语言, 进行初步的C语言代码阅读. 首先, 什么是语言? 对于人和人之间进行交流的语言, 我们知道, 可以通过汉语, 英语, 日语等语言进行交流. 那么对于人和计算…

SAP GUI 8.0 SMARTFORMS 使用SCR LEGACY TEXT EDITOR GUI8.00 禁用MSWORD

Smartforms使用WORD作为编辑器是很痛苦的一个事情&#xff0c;不支持拖拽&#xff0c;还很慢&#xff0c;各种不习惯&#xff0c;总之是非常的不舒服&#xff0c;能导致失眠。 在S/4以前的系统&#xff0c;可以使用TCODE I18N或者程序RSCPSETEDITOR或者暴力党直接改表TCP0I来…

C#难点语法讲解之委托---从应用需求开始讲解

一、委托的定义 委托&#xff08;Delegate&#xff09; 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。 简单解释&#xff1a;变量好控制&#xff0c;方法不好控制&#xff0c;委托可以把方法变成变量 二、例子解释定义 如果我们有一个数组,里面有10个…

Spring Security 的身份验证绕过漏洞CVE-2023-34035

文章目录 0.前言漏洞漏洞介绍描述 1.参考文档2.基础介绍2.1 组件简介&#xff1a;2.2 漏洞简介&#xff1a; 3.解决方案3.1. 升级版本 0.前言 背景&#xff1a;公司收到关于 Spring Security 的一个身份验证绕过漏洞的通知&#xff0c;该漏洞被标识为 CVE-2023-34035 漏洞 高 …

java项目之固定资产管理系统(源码+文档)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的固定资产管理系统。源码和部署相关看文章末尾&#xff01; 开发环境&#xff1a; 后端&#xff1a; 开发语言&#xff1a;Java 框架&…