基本设计模式

  • 单例模式
    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)

输出:
请添加图片描述

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

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

相关文章

PyTorch深度学习实战(38)——StyleGAN详解与实现

PyTorch深度学习实战(38)——StyleGAN详解与实现 0. 前言1. StyleGAN1.1 模型介绍1.2 模型策略分析 2. 实现 StyleGAN2.1 生成图像2.2 风格迁移 小结系列链接 0. 前言 StyleGAN (Style-Generative Adversarial Networks) 是生成对抗网络 (Generative Ad…

电商运营神器:如何利用数据API进行市场分析

在电子商务领域,市场分析是至关重要的一环。利用数据API进行市场分析可以帮助电商运营者洞察市场趋势、优化营销策略、提高用户满意度,并最终增加销售额。以下是如何利用数据API进行市场分析的一些关键步骤和策略: 获取市场数据 首先&#…

手搓反激电源 | 五、反激高频变压器的设计与计算

手搓反激电源 | 五、反激高频变压器的设计与计算 先上干货,变压器设计规格书 千里之行,积于跬步,万里之船,成于罗盘 A journey of thousands of miles accumulates in steps, and the ship of thousands of miles becomes a compass 反激式变换操作 反激式变换器的…

Java并发编程—final关键字

基本使用 修饰类 当某个类被修饰为 final,就表明此类不能被继承。 注意:final 中所有方法都隐式为 final,所以给 final 类中任何方法前加 final 都是没意义的 补充:如果想拓展一个 final 类怎么办?比如我们想写个 My…

基于springboot的教师工作量管理系统论文

教师工作量管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了教师工作量管理系统的开发全过程。通过分析教师工作量管理系统管理的不足,创建了一个计算机管理教师工作量管理系统的方案。文章…

Ambari动态给YARN分配计算节点

1.前言 YARN可用的计算节点数量并不总是等于 Hadoop集群节点数量,可以根据业务需求分配 YARN计算节点数量。 这里首先介绍一些前置知识: YARN中 ResourceManager 和 NodeManager是两个核心组件,其中 ResourceManager负责集群资源的统一管理…

C语言指针详解进阶2

函数指针数组 数组是一个存放相同类型数据的存储空间,那我们已经学习了指针数组, 比如: int *arr[10]; //数组的每个元素是int 那要把函数的地址存到一个数组中,那这个数组就叫 函数指针数组 ,那函数指针的数组如何定…

C++模拟揭秘刘谦魔术,领略数学的魅力

新的一年又开始了,大家新年好呀~。在这我想问大家一个问题,有没有同学看了联欢晚会上刘谦的魔术呢? 这个节目还挺有意思的,它最出彩的不是魔术本身,而是小尼老师“念错咒语”而导致他手里的排没有拼在一起,…

BUUCTF------[HCTF 2018]WarmUp

开局一个表情&#xff0c;源代码发现source.php <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist ["source">"source.php","hint">"hint.php"];if (! isset($page) |…

06_netdev网卡设备内核模块

01_basicLinux内核模块-CSDN博客文章浏览阅读315次&#xff0c;点赞3次&#xff0c;收藏3次。环境IDubuntuMakefilemodules:clean:basic.creturn 0;运行效果。https://blog.csdn.net/m0_37132481/article/details/136157384my_netdev.c #include <linux/kernel.h> #incl…

基于springboot的大学生就业招聘系统的设计与实现论文

大学生就业招聘系统的设计与实现 摘要 随着信息互联网信息的飞速发展&#xff0c;大学生就业成为一个难题&#xff0c;好多公司都舍不得培养人才&#xff0c;只想要一专多能之人才&#xff0c;不愿是承担社会的责任&#xff0c;针对这个问题开发一个专门适应大学生就业招聘的网…

ChatGPT引领的AI面试攻略系列:cuda和tensorRT

系列文章目录 cuda和tensorRT&#xff08;本文&#xff09;AI全栈工程师 文章目录 系列文章目录一、前言二、面试题1. CUDA编程基础2. CUDA编程进阶3. 性能优化4. TensorRT基础5. TensorRT进阶6. 实际应用与案例分析7. 编程与代码实践8. 高级话题与趋势 一、前言 随着人工智能…

谈谈mysql 的日志?binlog 和 redo log 有什么区别?

谈谈mysql 的日志? MySQL数据库中有多种日志&#xff0c;其中最重要的是二进制日志&#xff08;binlog&#xff09;、重做日志&#xff08;redo log&#xff09;和回滚日志&#xff08;undo log&#xff09;。这些日志在数据库操作中起着至关重要的作用&#xff0c;不仅保证了…

大部分人只有在工作几年后才知道什么是程序员

在大学 大学时期的我们&#xff0c;有几个从大一就开始好好学习&#xff0c;立志考研的&#xff1f;大多数人都只是在“享受大学生活”&#xff0c;就连选择计算机专业都是别人推荐的&#xff0c;根本不知道将来毕业会干啥。在我们的印象中&#xff0c;程序员就是一个模糊的名…

QT----写完的程序打包为APK在自己的手机上运行

目录 1、qt安装android组件2、打开qt配置Android 环境3、手机打开开发者模式&#xff0c;打开usb调试&#xff0c;连接电脑4、运行代码 1、qt安装android组件 qtcreater–工具-QTMaintenaceTool-startMaintenaceTool—登陆—添加或修改组件—找到android&#xff0c;安装 若是…

深入探讨 AutoGPT:彻底改变游戏的自主 AI

原文地址&#xff1a;Deep Dive into AutoGPT: The Autonomous AI Revolutionizing the Game 2023 年 4 月 24 日 AutoGPT 是一个功能强大的工具&#xff0c;它通过 API 使用 GPT-4 和 GPT-3.5&#xff0c;通过将项目分解为子任务并在自动循环中使用互联网和其他工具来创建完…

C++Json项目笔记

Github源项目地址&#xff1a;TinyJson 本人仓库地址&#xff08;跟原版差别不大&#xff0c;只是在有疑惑或者有收获的地方加上的注释作为笔记&#xff09; 文章目录 类的提前声明为什么定义函数的时候同时写左值和右值作为传参&#xff1f;解答 SFINAE机制&#xff08;疑惑…

Python高光谱遥感数据处理与机器学习

通过高光谱矿物识别&#xff0c;木材含水量提取、土壤有机碳评估等案例&#xff0c;提供可借鉴的高光谱应用领域的技术服务方案&#xff0c;结合Python科学计算、可视化、数据处理与机器学习等开源开发库&#xff0c;深入介绍高光谱技术的应用功能开发。 高光谱遥感信息对于我…

C++11线程同步之条件变量

C11线程同步之条件变量 condition_variable成员函数生产者和消费者模型 condition_variable_any成员函数生产者和消费者模型 条件变量是C11提供的另外一种用于 等待的同步机制&#xff0c;它能阻塞一个或多个线程&#xff0c;直到收到另外一个线程发出的通知或者超时时&#x…

springboot+xjar加密打包部署教程

需求背景 为了跟上时代的步伐&#xff0c;为了更好的生存。开个玩笑&#xff0c;就是心血来潮&#xff0c;使用xjar加密部署jar包&#xff0c;于是就测试一下。 xjar教程 1-maven配置文件修改 首先找到自己ideal配置的maven文件夹&#xff0c;然后找到apache-maven-3.9.3\co…