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

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern)

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

示例代码:

class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance = this;this.data = [];}addData(value) {this.data.push(value);}getData() {return this.data;}
}const singleton1 = new Singleton();
const singleton2 = new Singleton();singleton1.addData('value1');console.log(singleton1.getData()); // ['value1']
console.log(singleton2.getData()); // ['value1'] - Both are the same instance

2. 策略模式(Strategy Pattern)

定义一系列算法,把它们一个个封装起来,并且使它们可以互换。

示例代码:

class Context {constructor(strategy) {this.strategy = strategy;}executeStrategy(a, b) {return this.strategy.execute(a, b);}
}class AdditionStrategy {execute(a, b) {return a + b;}
}class SubtractionStrategy {execute(a, b) {return a - b;}
}const context = new Context(new AdditionStrategy());
console.log(context.executeStrategy(5, 3)); // 8context.strategy = new SubtractionStrategy();
console.log(context.executeStrategy(5, 3)); // 2

3. 代理模式(Proxy Pattern)

为其他对象提供一种代理以控制对这个对象的访问。

示例代码:

class RealObject {request() {console.log('Request made to RealObject');}
}class Proxy {constructor(realObject) {this.realObject = realObject;}request() {console.log('Request intercepted by Proxy');this.realObject.request();}
}const realObject = new RealObject();
const proxy = new Proxy(realObject);proxy.request(); // Request intercepted by Proxy// Request made to RealObject

4. 原型模式(Prototype Pattern)

通过复制现有的实例来创建新对象,而不是通过实例化新对象。

示例代码:

class Prototype {constructor() {this.primitive = 0;this.object = { a: 1 };}clone() {const clone = Object.create(this);clone.object = Object.assign({}, this.object);return clone;}
}const original = new Prototype();
original.primitive = 1;
original.object.a = 2;const copy = original.clone();
console.log(copy.primitive); // 1
console.log(copy.object.a);  // 2

相关文章:

在JS中的设计模式的单例模式、策略模式、代理模式、原型模式浅讲

1. 单例模式(Singleton Pattern) 确保一个类只有一个实例,并提供一个全局访问点。 示例代码: class Singleton {constructor() {if (Singleton.instance) {return Singleton.instance;}Singleton.instance this;this.data []…...

JVM系列(十) -垃圾收集器介绍

一、摘要 在之前的几篇文章中,我们介绍了 JVM 内部布局、对象的创建过程、运行期的相关优化手段以及垃圾对象的回收算法等相关知识。 今天通过这篇文章,结合之前的知识,我们一起来了解一下 JVM 中的垃圾收集器。 二、垃圾收集器 如果说收集算法是内存回收的方法论,那么…...

项目实战 ---- 商用落地视频搜索系统(9)---UI与上层service的交互优化

目录 背景 第一次优化(UI优化) 优化前UI 优化方向与问题 代码 修改效果 第二次优化(整合优化) 优化方向与问题 代码 优化效果 第三次优化(js层优化) 优化方向与问题 代码 优化效果 第四次优化(UI逻辑再优化) 优化方向与问题 代码 优化效果 第五次优化(纯U…...

媒体服务器软件BUG说明及改进方案

媒体服务器软件BUG说明及改进方案 一、BUG描述二、问题分析三、改进方案四、实施计划五、预期效果六、总结一、BUG描述 在当前版本的媒体服务器中,存在一个关于静音媒体流处理的问题。具体表现为:当主叫连续发送静音帧到媒体服务器时,媒体服务器并未将这些静音帧转发给被叫…...

Gitlab修改已push的历史commit信息

文章目录 一、需求 二、思路 三、修改过程 四、注意 五、参考链接 一、需求 项目组结合使用JIRA和Gitlab进行项目开发。其中,JIRA用于管理开发任务(每个任务都存在一个JIRA_ID),Gitlab用于进行代码版本管理。每次代码提交时,commit mes…...

[Linux入门]---进程替换

文章目录 1.进程替换原理2.进程替换函数2.1execl函数2.2execlp函数2.3execv函数2.4execvp函数2.5execle函数2.6execve函数2.7跨语言调用程序 3.总结 1.进程替换原理 一个程序替换的函数&#xff1a; #include <unistd.h> int execl(const char *path, const char *arg,…...

Java语言程序设计基础篇_编程练习题*18.9 (以逆序输出一个字符串中的字符)

目录 题目&#xff1a;*18.9 (以逆序输出一个字符串中的字符) 代码示例 输出结果 题目&#xff1a;*18.9 (以逆序输出一个字符串中的字符) 编写一个递归方法&#xff0c;使用下面的方法头在控制台上以逆序显示一个字符串: public static void reverseDisplay(String value…...

IT英语每日积累

IT词汇积累 前言今日学习1. be synonymous with2.handle something3.modify4.optionally5. generate6,sandby7.interrupt8.emphasize9.croodinate10.splitting and merging11.shard12.per13.consecutively14.synchronization15。unbounded 前言 这里给出的是本人在生活和学习中…...

QML学习二:Qt启用qml文件实时预览编辑,以及打印日志到控制台

开发环境:Qt 6.5.3 LTS 1、Qt 6.5.3 LTS 2、Pyside6 3、Python 3.11.4 效果如下,右侧更改的代码可以实时反映到左侧的设计器中。 Qt启用qml文件实时预览编辑,以及打印日志到控制台 一、打开Qt Designer插件二、qml和Python文件打印输出到控制台总结Qt Creator版本如下:…...

JVM面试真题总结(四)

文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 文章收录在网站&#xff1a;http://hardyfish.top/ 列举常用的垃圾收集器&#xff0c;并简要说明其特点 Serial收集器…...

P1352 没有上司的舞会

~~~~~ P1352 没有上司的舞会 ~~~~~ 总题单链接 思路 ~~~~~ 设 d p [ u ] [ [ 0 / 1 ] dp[u][[0/1] dp[u][[0/1] 表示第 u u u 个点 [ 不选 / 选 ] [不选/选] [不选/选] 的最大值。 ~~~~~ d p [ u ] [ 1 ] dp[u][1] dp[u][1] 只能用 d p [ v ] [ 0 ] dp[v][0] dp[v][0] 来更…...

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来&#xff0c;一站式有声阅读平台听书系统 &#x1f31f; 开篇&#xff1a;遇见未来&#xff0c;从“智听”开始 在这个快节奏的时代&#xff0c;你是否渴望在忙碌的间隙&#xff0c;找到一片属于自己的宁静角落&#xff1f;是否梦想着能随时随地&#xff0c;沉浸在知…...

2024 第七届“巅峰极客”网络安全技能挑战赛初赛 Web方向 题解WirteUp

EncirclingGame 题目描述&#xff1a;A simple game, enjoy it and get the flag when you complete it. 开题&#xff0c;前端小游戏&#xff0c;红点出不去就行 直接玩通关了 看看如何不玩也能拿到flag&#xff0c;flag存储在后端php文件内&#xff0c;前端找不到。 看一下…...

论文阅读笔记《面向集群协同的两点相对定位技术》

邓廷祥,任鹏,程甲,等.面向集群协同的两点相对定位技术[J].兵工学报,2023,44(S2):22-34. 摘要 无人机精确定位的三个难题&#xff1a; GNSS难以提供稳定准确的位置信息、难以部署辅助锚点、传统的相对定位方法大多存在节点数量限制。 本文针对上述问题&#xff0c;提出了一种GN…...

RK3566/RK3568 Android 11 无操作自动隐藏导航栏、底部上拉显示导航栏

概述 总目录:RK3566/RK3568 Android 11 定制大全 在系统服务中增加无操作自动隐藏导航栏方法,在上层app动态调用无操作自动隐藏导航栏方法,系统会在5秒无操作后自动隐藏导航栏,隐藏导航栏后从底部上拉可显示导航栏,设备关机和重启后也能继续生效。 创建全局变量 1.定义…...

四、Django模型

Model Model (模型) 简而言之即数据模型&#xff0c;是一个Django应用的核心。模型不是数据本身&#xff08;比如数据表里的数据), 而是抽象的描述数据的构成和逻辑关系。 每个Django的模型(model)实际上是个类&#xff0c;继承了models.Model。每个Model应该包括属性(字段)&…...

Telephony SS

1、补充业务概述 SS是补充服务的缩写,它包含呼叫转移、呼叫限制、呼叫等待、线路识别(CLIR)等。在IMS(IP多媒体子系统)网络中,它使用XCAP(XML配置访问协议)协议通过UT接口操纵SS数据。该协议允许授权用户在连接到IMS或连接到非IMS网络(例如公共互联网)时操纵与服务相…...

【软考】希尔排序算法分析

目录 1. c代码2. 运行截图3. 运行解析 1. c代码 #include <stdio.h> #include <stdlib.h> void shellSort(int data[], int n){// 划分的数组&#xff0c;例如8个数则为[4, 2, 1]int *delta;int k;// i控制delta的轮次int i;// 临时变量&#xff0c;换值int temp;…...

C++(一)----C++基础

1.C的发展史 C语言诞生后&#xff0c;很快普及使用&#xff0c;但是随着编程规模增大且越来越复杂&#xff0c;并且需要高度的抽象和建模时&#xff0c;C语言的诸多短板便表现了出来&#xff0c;为了解决软件危机&#xff0c;上世纪八十年代&#xff0c;计算机界提出了oop&…...

C 语言面试题大汇总之华为面试题

文章目录 1. 局部变量能否和全局变量重名?2. 如何引用一个已经定义过的全局变量?3. 全局变量可不可以定义在可被多个.C 文件包含的头文件中?为什么?4. 请写出下列代码的输出内容5. static 全局变量与普通的全局变量有什么区别?static 局部变量和普通局部变量有什么区别?s…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...