javascript的23种设计模式(持续更新中...)

JS的设计模式(23种) 抽象工厂模式提供一个接口用于创建一系列相关或相互依赖的对象,而无需指定具体类。客户端使用此接口选择所需的产品族中的产品对象。 阅读详情

1.单例模式

定义:一个类只能有一个实例,即使多次实例化也返回的是第一次实例

意义:共享变量、减少变量、函数命名冲突、减少内存开销

场景:登录框、购物车、redux/Vuex中的store、JQ的$

实现:

class SingletonLogin {
    constructor(name,password){
        this.name = name
        this.password = password
    }
    //使用ES6的static关键字,可以定义静态方法,从而可以直接使用类名.方法的方式调用getInstance()
    static getInstance(name,password){
        //判断对象是否已经被创建,若创建则返回旧对象
        if(!this.instance)this.instance = new SingletonLogin(name,password)
        return this.instance
    }
}

let obj1 = SingletonLogin.getInstance('CJW','123')
let obj2 = SingletonLogin.getInstance('CJW','321')

console.log(obj1===obj2)    //输出true
console.log(obj1)           //输入obj1
console.log(obj2)           //输入的依然是obj1{name:CJW,password:123}

 

 

8.适配器模式

  1. 介绍:适配器模式(Adapter Pattern):将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作。适配器的概念不难理解,我们在生活中就常常有使用适配器的场景,例如出境旅游插头插座不匹配,这时我们就需要使用转换插头,也就是适配器来帮我们解决问题。
  2. UML类图

    https://i-blog.csdnimg.cn/blog_migrate/12588e1de99285d25f3717cd1f0ad2de.png

  3. 代码演示
    class Adaptee {
        test() {
            return '旧接口'
        }
    }
    
    class Target {
        constructor() {
            this.adaptee = new Adaptee()
        }
        test() {
            let info = this.adaptee.test()
            return `适配${info}`
        }
    }
    
    let target = new Target()
    console.log(target.test())
    

     

  4. 场景:

适配器模式的常见使用场景是封装旧接口,我们项目中常常有很多由于历史原因留下的旧API,这里以JQ的AJAX举个例子,比如说,我们在项目中写了大量的$.ajax来进行异步请求,时过境迁,技术迭代,我们要把JQ的ajax全部换成自己封装的ajax来进行请求,如果我们直接在代码中替换,那么工作量非常大并且容易出错,这时候就可以使用适配器模式,去兼容原有的API。

//JQ的ajax
$.ajax({
    url:'/api',
    type:'post',
    dataType:'json',
    data:{},
    success: function(data){
                    
    },
})
//经过封装适配的ajax
var $ = {
    ajax:function(options) {
        //query()是自己封装的ajax,这里不写实现
        return query(options)
    }
}

经过适配,我们就可以在去除JQ的情况下继续使用$.ajax()

前端面试题(附答案)持续更新中…… 关于前端面试的题,这里整理了一些干货,经常被问到的一些问题,出现频率比较高的问题,如有不足之处,请大家指出,持续更新…(ps一到三颗代表重要性,选择性了解,掌握,前端需要知道的知识)盒模型由内容(content)、内边距(padding)、边框(border)、外边距(margin)组成。盒模型分为IE盒模型和W3C标准盒模型。W3C标准盒模型又叫content-box,元素宽度/高度由border+padding+content组成。(属性width,height只包含内容content,... 阅读详情

相关推荐

Js面试题(总结)持续取经更新……

1、面向对象的特征有哪些方面 --抽象:抽象是将一类对象的共同特征总结沟造出来的过程,包括数据抽象和行为抽象两方面,抽象只关注对象有哪些行为或者属性,并不关注这些行为的细节是什么。 --继承:继承是从已有类型得到继承信息创建新类的过程,提供继承的类叫父类(超类,基类)、得到继承的类叫子类(派生类) --封装:通常认为封装是把数据的操作和操作数据的方法绑定起来,对数据的访问只能童工已经定义的接口,可以说封装就是隐藏一切可以隐藏的东西,只向外界提供最简单的编程接口。举例:可以想想普通洗衣机和全自动洗衣机的

m0_67387108的博客 3980

js 设计模式(23种)

一、工厂模式 // 工厂模式——创建一个 div 标签 function createDiv(w, h, bg){ var style = `width:${w}px;height:${h}px;background:${bg};`; return `<div style=${style}></div>`; } for(var i=0; i<3; i++){ document.write(createDiv(Math.random()*100, Ma

青蛙king的博客 1万+

2024前端面试题总汇(持续更新中...)

前端面试八股文大全!!!!!

Monsters___的博客 6万+

JavaScript设计模式es6(23种)

.markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rgba(51, 51, 51, 1) } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .ma...

程序员小明1024 570

23种设计模式(设计模式)

23种设计模式(创建型,结构型,行为型)23种设计模式(创建型,结构型,行为型)23种设计模式(创建型,结构型,行为型)

野火STM32F407(骄阳)+无刷直流驱动板+永磁同步电机控制学习记录(四)(基于HAL库)

以上内容都是参考别人资料自学的,很多地方都是凭感觉,因为理论部分不太会算,只要电机能转就行,其他性能指标都没考虑,因为不会,所以这纯属是学习记录帖。带宽在500时,电流波动小,但是响应很慢,就是堵转后不太容易恢复转动。速度环带宽设定小了,响应不够快,带宽设定大了波动比较大,电机感觉起来也震一点,而且,当带宽设到200的时候,启动直接就锁死了,应该是PI增益设定太大了。电流环带宽的试验:去掉速度环,让Iq_Set=2,Ud=0,此时电机是电流环闭环控制,用手堵转电机然后松开,看电流的波动以及响应情况。

XUEXIDEXIAOhai的博客 4553

JavaScript设计模式与开发实践(网课学习)

Js设计模式与开发实践面向对象5大设计原则23种设计模式 面向对象 继承,封装和多态 js实现继承。(react中有应用) 作用:继承可以将公共方法抽离出来,提高复用率,减少冗余 class Person{ constructor(name,age) { this.name = name; this.age = age; } getPerson...

qq_40511157的博客 705

从时序参数到电压供给:TTL(RGB)液晶屏驱动调试全解析

本文全面解析TTL(RGB)液晶屏驱动调试的关键技术,从时序参数配置到电压供给系统搭建,详细介绍了同步信号参数、寄存器配置技巧以及升压电路设计。通过实战案例和常见故障分析,帮助工程师快速掌握液晶显示屏调试方法,提升开发效率。

weixin_30588675的博客 247

js 23种设计模型详解附代码详解

媒体模式(Memento Pattern):在不破坏对象的封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。行为型模式:用于描述对象之间的交互方式,包括观察者模式、命令模式、迭代器模式、模板方法模式、策略模式、职责链模式、状态模式、访问者模式、中介者模式等。观察者模式(Observer Pattern):定义对象之间的一种一对多的依赖关系,当对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。观察者模式是一种当一个对象被修改时,会自动通知它的依赖者的模式。

一步一个脚印,踏实努力,向着目标前进 1213

台式机ubuntu系统屏幕无法调节的问题(已解决)(汇总)

背景:新配了一台主机,安装了双系统,windows下屏幕在带鱼屏上显示良好,但Ubuntu系统屏幕拉伸严重。 问题描述:系统没有适应屏幕被整个拉伸了,进入设置界面,显示Built-in Display,分辨率只有1024*768无法设置。 尝试一:网上最多的方法就是使用xrandr, 结果显示:xrandr:Failed to get size of gamma for output default 尝试二: 第一次进入命令行页面:login:填你的用户面 password:使用字母上方的数字键输入你的密码

weixin_45626706的博客 4623

FlashAttention 快速安装指南(避免长时间编译)

FlashAttention 编译太慢?本篇提供无需编译的预编译 wheel 快速安装方案,适配多版本 Python、PyTorch 和 CUDA,极大节省部署时间!

Junseer的博客 9718

2022前端社招面试题(哔哩哔哩,美团,小红书,其他 持续更新...)

时间:2022.02.23 - 当前 记录了部分 前端社招的面试题,算法部分暂未整理 牛客网前端面试宝典: 点击前往 js [ ] JSbridge原理 [ ] js 有哪些数据类型 如何判断? [ ] null 和 undefined区别 应用场景? [ ] typeof和instanceof的区别链接 [ ] ES6 generator函数简述 [ ] ES6 promise函数简述 [ ] promise与async/await [ ] promise相关面试题 [ ] 数组去重实现? [

鲨了泥的博客 1696

你一直忽略的神器:离你最近的超强语音输入法(微信语音输入全攻略,支持全局混用)

你一直忽略的语音输入工具🎤 ,其实就在身边!无需额外软件,即可实现全局语音转文字⚡ 支持中英文混输,还能与其他输入法混合使用,聊天、办公都能高效完成,让你的输入效率轻松翻倍🚀

XiaoqiangClub的博客 903

探秘JavaScript设计模式:一个实用的开源项目分析

探秘JavaScript设计模式:一个实用的开源项目分析 项目简介 在前端开发领域,了解和熟练应用设计模式是提升代码质量、可维护性和扩展性的重要手段。 是一个专为JavaScript开发者准备的设计模式实践仓库,它通过实例详细解读了多种经典的设计模式,并提供了易于理解的代码示例。 技术分析 该项目涵盖了以下主要的技术点: 设计模式分类:包括创建型、结构型和行为型三大类别的23种常见设计模式,如...

gitblog_00080的博客 469

Spark中Application、Job、Stage和Task区别详解

在Spark中,有一些关键的概念,如Application、Job、Stage和Task,它们描述了Spark作业的不同层次和组成部分。下面我将详细介绍每个概念,并通过示例说明它们之间的区别。

优快云 精品推荐 900

YOLOv13改进策略【特征提取层】| CVPR-2024 PKI Module 获取多尺度纹理特征,适应尺度变化大的目标

PKI Module是。

Limiiiing的博客 275

javascript面试题--持续更新

事件代理(),又称之为事件委托。是JavaScript中常用绑定事件的常用技巧。顾名思义,“事件代理”即是把原本需要绑定的事件委托给父元素,让父元素担当事件监听的职务。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好处是可以提高性能可以大量节省内存占用,减少事件注册,比如在table上代理所有td的click事件就非常棒可以实现当新增子对象时无需再次对其绑定。

jyl919221lc的博客 4739

如何从 VMware 官网下载最新版本的 VMware Workstation

如何从 VMware 官网下载 VMware Workstation

XiaoqiangClub的博客 5877

前端笔试题总结,带答案和解析(持续更新,上次更新23/10/22,目前有31题)

这个系列将持续更新前端笔试题一期十题,每五题做一个标题(方便跳转),您可以一期一期阅读,也可以在点击汇总,一口气看完,如果对题目有不理解的地方,欢迎大家在评论区提问,如果有更好的意见也欢迎大家留言!!!

sinat_51673411的博客 8530

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

探索JavaScript设计模式:构建高效、可维护的应用

探索JavaScript设计模式:构建高效、可维护的应用 在软件开发中,设计模式是一种解决常见问题的经验总结,它为编写可复用和可扩展的代码提供了指导。对于JavaScript开发者来说,理解并应用设计模式是提升代码质量和可维护性的重要手段。今天我们要介绍的项目是,这是一个深入讲解JavaScript设计模式的开源库。 项目概述 该项目由@xingbofeng创建,旨在提供一个全面的学习资源,帮助开...

gitblog_00006的博客 302

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

23届秋招前端笔面经合辑(持续更新)

23届秋招前端笔面经合辑(持续更新)

qq_38769403的博客 9706

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

我在b站上大学:计算机类优秀网课汇总【持续更新】

自己在学习过程中搜罗了一些优秀的计算机课程网课,在这里汇总分享 软件工程 软件工程导论 张海藩 这门课课程质量不是很平稳,中间有一些课是另外一个老师讲的,逻辑并不很清楚,可以挑着看 北京大学-软件工程(国家级精品课)课堂录播–孙艳春老师 软件工程(国家精品课)-清华大学 清北两家的自行选一个看吧hhhhh 计算机网络 韩立刚老师主讲 计算机网络第5版谢希仁编写 全集156集 这位老师在授课前已经做了十年的网络工程师,讲课时会结合实际应用,就业党可以选择这个 2019 王道考研 计算.

浪矢五金店 3万+

HTML+CSS+JS学习(持续更新中)

超链接可以让我们从一个页面跳转到其他页面,或者是当前页面的其他的位置使用a标签来定义超链接,href属性指定跳转的目标路径,值可以是一个外部网站的地址,也可以写一个内部页面的地址超链接是也是一个行内元素,在a标签中可以嵌套除它自身外的任何元素,那么嵌套的元素就相当于一个超链接。在网页中HTML专门用来负责网页的结构,所以在使用HTML标签的时候,应该关注的是标签的语义,而不是他的样式,这里先介绍几个基本的于一标签,还有些常用的标签放在后面具体讲解。标签用来向页面中引入一个外部的音频文件。

m0_46486963的博客 6896

js parsefloat保留两位小数_JS的笔记 持续更新/改进中

JS基本语法(目前不包括ES6)文中必有不正确or不恰当的地方,目前的水平仅如此,可以喷这篇文章,但请别喷作者谢谢。文中如有错误的地方,愿意的话请告知作者 感激不尽!目录:如何查找呢?ctrl+F 输入 第1页1页 JS基本知识2页 JS命名规则3页 JS中如何转换数据类型3.1 转换字符串 toString3.2 转换数值 parseInt parseFloat3.3 转换数值 isNaN3....

weixin_39595085的博客 4096

107个JS常用方法(持续更新中)

1.输出语句:document.write(""); 2.JS中的注释为// 3.传统的HTML文档顺序是:document->html->(head,body) 4.一个浏览器窗口中的DOM顺序是:...

QDY5945的博客 580

JavaScript学习笔记(持续更新)

JavaScript学习笔记(持续更新)JavaScript1. 什么是JavaScript1.1 概述2. 快速入门2.1 引入JavaScript2.2 基本语法2.2.1 定义变量2.2.2 条件控制2.3 数据类型2.3.1 number2.3.2 字符串2.3.3 布尔值2.3.4 null和undefiend2.3.5 数组2.3.6 对象2.3.7 严格检查格式的使用2.3.8 字符串 JavaScript 1. 什么是JavaScript 1.1 概述 ECMAScript可以理解为是Jav

m0_46527956的博客 870
上一篇: 【CSS拾遗】页面布局(一)
下一篇: element Table表格组件多字段(多列)排序方法
Java_AiNiYo
博客等级 码龄9年 5粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值