基本设计模式

news2024/9/24 17:17:53
  • 单例模式
    ES5
function Duck1(name:string){
    this.name=name
    this.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=null
    action(){
        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.coloradmin.cn/o/1491271.html

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

相关文章

【王道操作系统】ch2进程与线程-01进程与线程(长文预警)

文章目录 【王道操作系统】ch2进程与线程-01进程与线程01 进程的概念、组成和特征(1)进程的概念(2)进程(进程实体)的组成①PCB(给操作系统用的)②程序段(给进程自己用的&…

【YOLO v5 v7 v8 v9小目标改进】DWRSeg:优化的多尺度处理,传统的深度学习模型可能在不同尺度的特征提取上存在冗余

DWRSeg:优化的多尺度处理,传统的深度学习模型可能在不同尺度的特征提取上存在冗余 提出背景问题:实时语义分割需要快速且准确地处理图像数据,提取出有意义的特征来识别不同的对象。 小目标涨点YOLO v5 魔改YOLO v7 魔改YOLO v8 魔…

开发知识点-Python-爬虫

爬虫 scrapybeautifulsoupfind_all find祖先/父节点兄弟节点nextpreviousCSS选择器属性值 attrsselect 后 class 正则使用字符串来描述、匹配一系列符合某个规则的字符串组成元字符使用grep匹配正则组与捕获断言与标记条件匹配正则表达式的标志 特定中文 匹配 scrapy scrapy内…

ArcGIS学习(十三)多源数据下的城市街道功能评估

ArcGIS学习(十三)多源数据下的城市街道功能评估 本任务带来的内容是多元数据下的城市街道功能评估。本任务包括两个关卡: 城市街道空间中观解读 城市街道功能详细评价 首先,我们来看看本任务的分析思路。 1.城市街道空间中观解读 下面我们正式进入第一关的内容一- 城市…

[Flutter get_cli] 配置 sub_folder:false报错

flutter get_cli 配置 get_cli:sub_folder:false报错如下 Because getx_cli_learn01 depends on get_cli from unknown source "sub_folder", version solving failed. 原因是在 pubspec.yaml文件中, get_cli:sub_folder:false要和 dependencies: xxx dev_depe…

每日学习总结20240301

20240301 1. strchr VS strrchr strchr和strrchr是C语言标准库中的字符串处理函数,用于在字符串中查找特定字符的位置。 1.1 strchr函数 strchr函数用于在字符串中查找第一次出现指定字符的位置,并返回该位置的指针。函数原型如下: char…

Cannot install Microsoft Office 64-bit after removing Office 32-bit 卸载微软之前版本

问题描述 win10系统安装了一个Viso2019,无法安装Excel 64位版本。弹窗报错 解决办法1 SaRACmd https://winitpro.ru/index.php/2017/12/11/office-all-versions-removal-scripts/用于完全删除任何版本的 MS Office 的脚本 使用 Microsoft SaRa 实用程序自动卸载…

基于yolov5的烟花检测系统,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示: 基于yolov5的烟花检测系统,系统既能够实现图像检测,也可以进行视屏和摄像实时检测_哔哩哔哩_bilibili (一)简介 基于yolov5的烟花检测系统是在pytorch框架下实现的,这是一个完整的项目&#x…

服务器后端是学习java还是php

没有绝对的"最好"语言,每种后端语言都有其适用的场景和特点。以下是几种常用的后端语言: 1. Java:Java是一种通用且强大的语言,广泛用于企业级应用和大型系统。它有很好的性能和可靠性,并且具有优秀的生态系…

vm虚拟机的下载与安装(更新时间24/2/28)

首先进入vm官网点击跳转 进入products 进入Workstation Pro 点击DOWNLOAD TRIAL 点击DOWNLOAD NOW 到这里只需要等待下载完成就行了 安装就是正常软件程序的安装方法,除了自定义一下安装位置,其他的直接确定 许可证密钥 在网络上有很多随便一搜…

python数据类型及转换

一、数据类型 数据类型分为数值型、布尔型、字符串型等 1.1数值类型 数值类型可以分为整数类型、浮点数类型、复数类型 1.1.1整数类型 (1)概念:整数类型指数值是没有小数部分的,包含正整数、负整数和0 (2)进制种类:十进制--->234、5…

关于Java并发多线程的一点思考

写在开头 在过去的2023年双11活动中,天猫的累计访问人次达到了8亿,京东超60个品牌销售破10亿,直播观看人数3.0亿人次,订单支付频率1分钟之内可达百万级峰值,这样的瞬间高并发活动,给服务端带来的冲击可想而…

如何利用会话式AI提升你的工作效率?

会话式AI如何改变我们的生活和工作 在当今时代,内容策略的重要性日渐凸显,良好的内容策略能够与流量及转化率紧密相连,成为企业在内容策略领域不容忽视的营销工具之一。 然而,目前内容同质化现象严重,企业若想在内容营…

爬虫入门到精通_实战篇11(使用代理处理反爬抓取微信文章)_PyQuery使用

1 目标 搜狗-微信这个网址来爬取微信的文章: ps:登录后才能查看第10页之后的内容: 量翻页触发了网站的反爬虫措施,导致ip被封,需要进行解锁。 然而从doc中可以看到,请求失败的那页(状态码应…

vs2022 qt 关于lnk2001和2019同时报错的问题

需要像qt中添加模块,这里,缺少qtopenglwidgets模块

向上生长笔记

第一章 成为一个很厉害的人(持续输入,反复练习) 为什么要学习及如何学习 1、自毁趋势(熵增),故需要能量输入(负熵流) //引申:水往低处流是趋势,学习是逆趋势。 2、持续输入能量(物质和信息),…

C++ 根据公式计算椭圆任意点到中心的距离

#include <iostream> using namespace std;double fact(int x) //定义阶乘函数。注意是double类型 {double y x; //注意是double类型for (int i x-1; i > 0; i--)y * i;return y; };double My_sin(int x) //定义sin函数。注意是double类型 {double y 0; //注意是do…

SPI总线知识总结

1 SPI的时钟极性CPOL和时钟相位CPHA的设置 1.1 SPI数据传输位数 SPI传输数据过程中总是先发送或接收高字节数据&#xff0c;每个时钟周期接收器或发送器左移一位数据。对于小于16位的数据&#xff0c;在发送前必须左对齐&#xff0c;如果接收的数据小于16位&#xff0c;则采用软…

wordpress模板官网

移民wordpress主题 移民代办wordpress主题&#xff0c;适合做海外移民咨询的代理公司搭建wordpress企业官方网站使用。 https://www.jianzhanpress.com/?p5130 夏令营wordpress主题 绿色夏令营wordpress主题&#xff0c;适合做夏令营或户外拓展的公司搭建wordpress官方网站…

Go 与 Rust:导航编程语言景观

在当今构建软件时&#xff0c;开发者在编程语言上有着丰富的选择。两种脱颖而出的语言是 Go 和 Rust - 都很强大但却截然不同。本文将从各种因素比较这两种语言&#xff0c;以帮助您确定哪种更适合您的需求。 我们将权衡它们在并发、安全性、速度、互操作性等方面的方法。我们将…