基本设计模式
- 单例模式
ES5
function Duck1(name:string){this.name=namethis.instance=null
}Duck1.prototype.getName=function(){console.log(this.name)
}Duck1.getInstance=function(name:string){if(!this.instance){this.instance= new Duck1(name)}
}
const a=Duck1.getInstance('a')
const b=Duck1.getInstance('b')console.log(a===b) // true
ES6
class Duck{name="xxx"static instance:any=nullaction(){console.log('123')}static getInstance(){if(!this.instance){this.instance=new Duck()} return this.instance}
}const obj1=Duck.getInstance()
const obj2=Duck.getInstance()console.log(obj1===obj2) // true
- 工厂模式
class Duck{name="xxx"constructor(name:string){this.name=name}
}function factory(name:string){return new Duck(name)
}const a=factory('x')
const b=factory('s')
- 策略模式
代码里有多个if的情况时,做成策略模式,好处:
策略模式利用组合,委托等技术和思想,有效的避免很多if条件语句
策略模式提供了开放-封闭原则,使代码更容易理解和扩展
策略模式中的代码可以复用
策略模式优化的例子
` - 代理模式
class Duck{name="xxx"constructor(name:string){this.name=name} getName(){console.log('name: ',this.name)}setName(newValue:string){this.name=newValue}
}const tp=new Duck('a')const obj = new Proxy(tp,{set:function(target,property,value){return Reflect.set(target,property,'new:'+value)},get(target,property){if(property==='getName'){return function(value:String){Reflect.get(target,property,'new:'+value)}}return Reflect.get(target,property)}
})console.log(obj.name)obj.setName('jack')console.log(obj.name)
输出:

相关文章:
基本设计模式
单例模式 ES5 function Duck1(name:string){this.namenamethis.instancenull }Duck1.prototype.getNamefunction(){console.log(this.name) }Duck1.getInstancefunction(name:string){if(!this.instance){this.instance new Duck1(name)} } const aDuck1.getInstance(a) const…...
双通道音频功率放大电路,外接元件少, 通道分离性好,3V 的低压下可正常使用——D2025
D2025 为立体声音频功率放大集成电路,适用于各类袖珍或便携式立体声 收录机中作功率放放大器。 D2025 采用 DIP16 封装形式。 主要特点: 适用于立体声或 BTL 工作模式 外接元件少 通道分离性好 电源电压范围宽(3V~12V ÿ…...
Linux 内核获取函数size
方式一:通过objdump -t直接从目标文件中获取函数size #objdump -t file_unread.o | grep hook 0000000000000030 l F .text 000000000000012f hook_vfs_read0000000000000030 l F .text 000000000000012f hook_vfs_read各个字段说明 0000000000000030&#x…...
Python+neo4j构建豆瓣电影知识图谱
文章目录 数据来源数据整理导入节点和关系导入使用Subgraph批量导入节点和关系多标签实体和实体去重数据来源 http://www.openkg.cn/dataset/douban-movie-kg 该网址拥有丰富的中文知识图谱数据集,OpenKG(Open Knowledge Graph),可供研究人员使用研究。 数据整理导入 impor…...
DolphinScheduler——介绍及架构设计
目录 一、DolphinScheduler介绍 1.1 概述 1.2 特性 1.2.1 简单易用 1.2.2 丰富的使用场景 1.2.3 High Reliability 1.2.4 High Scalability 1.3 名词解释 1.3.1 名词解释 1.3.2 模块介绍 二、DolphinScheduler架构原理 2.1 系统架构图 2.2 架构说明 2.2.1 Maste…...
【Python】约瑟夫环问题
任务描述 据说著名历史学家 Josephus有过以下的故事:Josephus及他的朋友共41人围成一个圆圈,由第1个人开始报数,每数到3该人就必须出去,然后再由下一个人重新报数,直到圆圈上少于3人为止。Josephus 将朋友与自己安排在…...
Python成功解决AttributeError: ‘Series‘ object has no attribute ‘set_value‘
Python成功解决AttributeError: ‘Series‘ object has no attribute ‘set_value‘ 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&am…...
基于springboot+vue的医院药品管理系统
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 主要内容:毕业设计(Javaweb项目|小程序|Pyt…...
Python爬虫——Urllib库-1
这几天都在为了蓝桥杯做准备,一直在刷算法题,确实刷算法题的过程是及其的枯燥且枯燥的。于是我还是决定给自己找点成就感出来,那么Python的爬虫就这样开始学习了。 注:文章源于观看尚硅谷爬虫视频后笔记 目录 Urllib库 基本使…...
瑞_Redis_短信登录(一)
文章目录 项目介绍1 项目准备1.1 导入SQL1.2 导入后端项目1.2 导入前端项目 🙊 前言:本文章为瑞_系列专栏之《Redis》的实战篇的短信登录章节的项目准备小节。由于博主是从B站黑马程序员的《Redis》学习其相关知识,所以本系列专栏主要是针对该…...
《剑指 Offer》专项突破版 - 面试题 70 : 排序数组中只出现一次的数字(C++ 实现)
题目链接:LCR 070. 有序数组中的单一元素 - 力扣(LeetCode) 题目: 在一个排序的数组中,除一个数字只出现一次之外,其他数字都出现了两次,请找出这个唯一只出现一次的数字。例如,在…...
Linux安全加固功能
提示:工具下载链接在文章最后 目录 一.加固功能介绍二.配置加固功能1.配置安全加固功能1.1 开放目前设备监听的所有端口1.2 只开放80、443、20、21、22端口1.3 防火墙配置工具1.3.1 开放允许访问的端口1.3.2 删除允许访问的端口1.3.3 添加IP地址允许访问规则1.3.4 添加IP地址禁…...
最新AI系统ChatGPT网站H5系统源码,支持Midjourney绘画
一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,那么如何搭建部署AI创作ChatGPT?小编这里写一个详细图文教程吧。已支持GPT…...
【服务器数据恢复】昆腾存储中raid5磁盘阵列数据恢复案例
服务器数据恢复环境&故障: 10个磁盘柜,每个磁盘柜配24块硬盘。9个磁盘柜用于存储数据,1个磁盘柜用于存储元数据。 元数据存储中24块硬盘,组建了9组RAID1阵列1组RAID10阵列,4个全局热备硬盘。 数据存储中࿰…...
企业微信变更主体怎么改?
企业微信变更主体有什么作用?现在很多公司都用企业微信来加客户,有时候辛辛苦苦积累了很多客户,但是公司却因为各种各样的原因需要注销,那么就需要通过企业微信变更主体的方法,把企业微信绑定的公司更改为最新的。企业…...
常用生理眼电信号整理合集 (EOG)
目录 Sleep-EDF Sleep-EDF expanded Sleep-EDF 这些信号是从白人男性和女性(21-35 岁)中获得的,没有任何药物治疗;它们包含水平 EOG、FpzCz 和 PzOz EEG,每个采样频率为 100 Hz。 sc* 记录还包含颏下肌电图包络、口鼻…...
【场景题】让你设计一个订单号生成服务,该怎么做?
方案 当设计订单号生成服务时,我们需要考虑唯一性、数据量、可读性、基因法、可扩展性、高性能和高可用性等多个方面。根据这些考虑,一个简单的订单号生成服务设计方案可以采取以下措施: 使用Snowflake算法或第三方分布式ID生成器ÿ…...
使用GraphView实现简单的绘图工具
ShapeItem代码: ShapeItem::ShapeItem(ShapeType type) {m_type type;m_lt QPointF(0, 0);m_rb QPointF(0, 0);m_deleteEnable false;m_bll BllData::getInstance();connect(m_bll, &BllData::deleteShapeEnableSignal, this, &ShapeItem::deleteShap…...
javaWebssh教师荣誉库管理系统myeclipse开发mysql数据库MVC模式java编程计算机网页设计
一、源码特点 java ssh在线授课辅导系统是一套完善的web设计系统(系统采用ssh框架进行设计开发),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0…...
Android minigbm框架普法
Android minigbm框架普法 引言 假设存在这么一个场景,我的GPU的上层实现走的不是标准的Mesa接口,且GPU也没有提专门配套的gralloc和hwcompoer实现。那么我们的Android要怎么使用到EGL和GLES库呢,并且此GPU驱动是支持drm实现的,也有…...
实测nanobot:5分钟搭建个人AI助手,还能轻松接入QQ聊天
实测nanobot:5分钟搭建个人AI助手,还能轻松接入QQ聊天 1. nanobot核心优势解析 nanobot作为一款超轻量级个人AI助手解决方案,在技术架构和用户体验上都有显著突破。这个受OpenClaw启发的项目,仅用约4000行代码就实现了完整的智能…...
FreeRTOS 工程化要点:任务划分、优先级设计与 CPU 占用率监控
大家好,我是杂烩君。 今天我们来简单分享:FreeRTOS任务怎么拆、优先级怎么配、CPU 占用怎么看。1. 任务划分原则 1.1 单一职责:一个任务只干一件事 把"串口接收 数据解析 指令执行 结果反馈"全塞一个任务,解析环节一…...
自注意力:句子里的词互相“看“对方——信息交流的艺术
自注意力:句子里的词互相"看"对方——信息交流的艺术(Version B) 📚 《从零到一造大脑:AI架构入门之旅》专栏 专栏定位:面向中学生、大学生和 AI 初学者的科普专栏,用大白话和生活化比喻带你从零理解人工智能 本系列共 42 篇,分为八大模块: 📖 模块一【A…...
终极解析器构建指南:Ohm从CSV解析到自定义语法实战
终极解析器构建指南:Ohm从CSV解析到自定义语法实战 【免费下载链接】ohm A library and language for building parsers, interpreters, compilers, etc. 项目地址: https://gitcode.com/gh_mirrors/oh/ohm Ohm是一个强大的解析器构建库和领域特定语言&#…...
【研报280】汽车轻量化材料研究报告:改性塑料的应用趋势
本报告提供限时下载,请查看文后提示以下仅为报告部分内容:摘要:政策与新能源汽车需求双重驱动下,汽车轻量化成为行业核心发展方向,2026年国内将实施新的乘用车碳排放国标,叠加新能源汽车普遍重于燃油车&…...
Claude Code 官方回应代码泄漏:这次,他们没有“甩锅人”
这两天,Claude Code 的“代码泄漏”事件在技术圈引发了不少讨论。各种版本的故事层出不穷,甚至还有营销号声称“新员工背锅被开除”。但从官方回应来看,事情的走向,其实完全不一样。👉 Claude Code 团队,正…...
2种开源工具解决方案解决Beyond Compare 5授权失效问题
2种开源工具解决方案解决Beyond Compare 5授权失效问题 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen Beyond Compare 5作为一款专业的文件比较与同步工具,在软件开发和数据管理领域…...
美元、日元、欧元怎么选?外汇新手该从哪个货币对开始?
最近有不少刚接触外汇交易的朋友问我同一个问题:美元、日元、欧元这些主流货币到底该怎么选?作为一个过来人,我想说的是——选对起步品种,比你想象中重要得多。 很多新手一上来就想着“赚快钱”,直接冲进波动剧烈的交叉…...
3分钟搭建你的微信智能管家:零代码实现24小时自动回复
3分钟搭建你的微信智能管家:零代码实现24小时自动回复 【免费下载链接】WechatBot 项目地址: https://gitcode.com/gh_mirrors/wechatb/WechatBot 想要一个能帮你自动处理微信消息的智能助手吗?WechatBot微信机器人让你在3分钟内拥有一个全天候在…...
AI 模型训练中的梯度裁剪技巧
AI模型训练中的梯度裁剪技巧 在深度学习的模型训练过程中,梯度爆炸是一个常见的问题,它会导致模型参数更新过大,进而使训练过程变得不稳定甚至无法收敛。为了解决这一问题,梯度裁剪(Gradient Clipping)技术…...
