基本设计模式

  • 单例模式
    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.hqwc.cn/news/511985.html

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

相关文章

蓝桥杯——123

123 二分等差数列求和前缀和数组 题目分析 连续一段的和我们想到了前缀和,但是这里的l和r的范围为1e12,明显不能用O(n)的时间复杂度去求前缀和。那么我们开始观察序列的特点,可以按照等差数列对序列进行分块。如上图,在求前10个…

unity Game视图看不到贴花,但是在Scene视图能看到

解决方法:找到URP的配置文件 ,修改Quality–RederScale为1,就可以了,这是unity 的bug,2022版本以后就没有这个问题了

ES完全入门

1、ES集群节点有哪些主要角色? 1.1、Master 1.2、Data 1.3、Ingest 1.4、Coordination 2、Shard数量的确定

Guitar Pro 8.1中文版永久许可证激活2024最新24位注册激活码生成器

Guitar Pro是一款非常受欢迎的音乐制作软件,它可以帮助用户创建和编辑各种音乐曲谱。从其诞生以来就送专门为了编写吉他谱而研发迭代的。 尽管这款产品可能已经成为全球最受欢迎的吉他打谱软件,在编写吉他六线谱和乐队总谱中始终处于行业领先地位&#…

BERT学习【BERT的例子以及作用】

一、case 1.case1 多输入单输出。通过输入一个句子(sequence),然后输出一个句子的分类(这个句子是正向还是负向)。将句子输入BERT,然后通过softmax输出分类。 2.case2 多输入多输出。输入一个句子&…

Linux - 进程概念

1、冯诺依曼体系结构 我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系; 截至目前,我们所认识的计算机,都是有一个个的硬件组件组成: 输入单元:…

C++ Primer Plus Sixth Edition - 下载电子书与源代码

C Primer Plus Sixth Edition - 下载电子书与源代码 1. C Primer Plus, 6th Edition1.1. Download the source code files1.2. 下载源代码文件 2. C Primer Plus, Sixth Edition (PDF)3. Table of ContentsReferences 1. C Primer Plus, 6th Edition C Primer Plus, 6th Editi…

Docker下Jenkins打包java项目并部署

docker 构建Jenkins sudo docker run --namezen_haslett --userjenkins --privilegedtrue --volume/home/cyf/server/jenkins/jenkins_home:/var/jenkins_home -v /usr/lib/jvm/java-17-openjdk-amd64:/usr/lib/jvm/java-17-openjdk-amd64 -v /usr/lib/maven/apache-mav…

获奖公布|MO 社区系统有奖调查问卷

2月2日,MatrixOne社区发起了关于“操作系统”的有奖问卷调查,我们将根据本次调查结果来针对性的增强对相关操作系统的覆盖测试。截止 2 月 17 日,我们收集到了数十份问卷,认真查看了每位参与者填写的问卷,并评选出了 8…

项目管理中,项目经理如何搞定跨部门沟通与协作?

在项目管理中,跨部门沟通是一项至关重要的任务。项目经理作为项目的核心协调者,需要确保不同部门之间的顺畅沟通,以推动项目的顺利进行。项目经理如何搞定跨部门沟通? 实际案例: 某公司正在开发一款智能家居系统&am…

xss.haozi.me:0X12

</script> <script>alert(1)\</script>

程序员必看!编程学习必备的100多个学习网站,建议收藏!

今天推荐一些学习资源给大家&#xff0c;当然大家可以留言评论自己发现的优秀资源地址 搞学习,找书籍,冷知识 / 黑科技,写代码,资源搜索,小工具.导航页&#xff08;工具集&#xff09;,看视频,学设计,搞文档,找图片 TED&#xff08;最优质的演讲&#xff09;&#xff1a;https…