![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
javascript设计模式
文章平均质量分 91
刘大爷_17
屠龙宝刀拿在手,荣华富贵全都有~~~
展开
-
《JavaScript设计模式与开发实践》——第十五章(装饰者模式)学习记录
给对象动态地增加职责的方式称为。装饰者模式能够在不改变对象自身的基础上,在程序运行期间给对象动态地添加职责。跟继承相比,装饰者是一种更轻便灵活的做法,这是一种“即用即付”的方式。...原创 2022-08-29 22:55:32 · 194 阅读 · 0 评论 -
《JavaScript设计模式与开发实践》——第十四章(中介者模式)学习记录
中介者模式的作用就是解除对象与对象之间的紧耦合关系。所有的相关对象都通过中介者对象来通信,而不是互相引用,所以当一个对象发生改变时,只需要通知中介者对象即可。玩家数目为2,所以当其中一个死亡游戏就结束,并且通知对手胜利:为游戏增加队伍现在我们已经可以随意地为游戏增加玩家或者队伍,但是每个玩家和其他玩家都是紧紧耦合在一起的。如果是一个大型的网络游戏,如果一个玩家掉线,必须从所有其他玩家的队友列表和敌人列表中都移除这个玩家,显然我们上面的代码也要迅速进入投降模式了。假设小明和小红掉线,小丽和小花死亡原创 2022-07-02 12:20:22 · 594 阅读 · 0 评论 -
《JavaScript设计模式与开发实践》——第十三章(职责链模式)学习记录
职责链模式的定义是:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。假设我们负责一个售卖手机的电商网站,经过分别交纳500元定金和200元定金的两轮预定后(订单已在此时生成),现在已经到了正式购买的阶段。公司针对支付过定金的用户有一定的优惠政策。在正式购买后,已经支付过500元定金的用户会收到100元的商城优惠券,200元定金的用户可以收到50元的优惠券,之前没有支付定金的用户只能进入普通购买模式,也就是没有优原创 2022-06-27 06:04:23 · 304 阅读 · 0 评论 -
《JavaScript设计模式与开发实践》——第十二章(亨元模式)学习记录
亨元模式是一种用于性能优化的模式,享元模式的核心是运用共享技术来有效支持大量细粒度的对象。如果系统中因为创建了大量类似的对象而导致内存占用过高,享元模式就很有用了。假设弄个工厂,为了推销自己生产的衣服,要用塑料模特穿上衣服拍成照片进行推广。有50种男士上衣和50种女士上衣,不使用享元模式的情况下,我们可能会这样实现:上述代码生成了50个男模特50个女模特,如果衣服种类提升到了10000种,这种方式要生成20000个模特,显然是不行的,接下来改写一下代码:代码改成了只生成一个男模特和一个女模特,一个模特原创 2022-06-16 22:29:14 · 127 阅读 · 0 评论 -
《JavaScript设计模式与开发实践》——第十一章(模板方法)学习记录
模板方法模式是一种只需要使用继承就可以实现的非常简单的模式。模板方法模式由两部分结构组成,第一部分是抽象父类,第二部分是具体的实现子类。通常在抽象父类中封装了子类的算法框架,包括实现一些公共方法以及封装子类中所有方法的执行顺序。子类通过继承这个抽象类,也继承了整个算法结构,并且可以选择重写父类的方法。1.先泡一杯咖啡(1)把水煮沸(2)用沸水冲泡咖啡(3)把咖啡倒进杯子(4)加糖和牛奶通过下面这一段代码,我们就能得到一杯香浓的咖啡2.泡一壶茶(1)把水煮沸(2)用沸水浸泡茶叶(3)把茶水倒原创 2022-06-10 20:20:47 · 106 阅读 · 0 评论 -
《JavaScript设计模式与开发实践》——第十章(组合模式)学习记录
通过观察可以发现,宏命令中包含了一组子命令,它们组成了一个树形结构。其中MacroCommand被称为组合对象,closeDoorCommand、openPcCommand、openQQCommand都是叶对象。组合模式将对象组合成树形结构,以表示“部分-整体”的层次结构。除了用来表示树形结构之外,组合模式的另一个好处是通过对象的多态性表现,使得用户对单个对象和组合对象的使用具有一致性。在组合模式中,请求在树中传递的过程总是遵循一种逻辑。以宏命令为例,请求从树最顶端的对象往下传递,如果当前处理请求的对原创 2022-06-01 22:40:26 · 176 阅读 · 0 评论 -
《JavaScript设计模式与开发实践》——第九章(命令模式)学习记录
命令模式是最简单和优雅的模式之一,命令模式中的命令(command)指的是一个执行某些特定事情的指令。命令模式最常见的应用场景是:有时候需要向某些对象发送请求。但是并不知道请求的接收者是谁,也不知道被请求的操作是什么。此时希望用一种松耦合的方式来设计程序,使得请求发送者和请求接收者能够消除彼此之间的耦合关系。命令模式的例子-----菜单程序假设我们正在编写一个用户界面程序,该界面上至少有数十个Button按钮。因为项目比较复杂,所以我们决定让某个程序员负责绘制这些按钮,另一些程序员负责编写点击按钮后的原创 2022-04-05 14:11:05 · 880 阅读 · 0 评论 -
《JavaScript设计模式与开发实践》——第八章(发布-订阅模式)学习记录
发布-订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。现实中我们就能找到发布-订阅模式,比如,小明最近看上了一套房子,到了售楼处才知道房子售罄了,但是售楼MM告诉小明,不久后还有一些尾盘推出,开发商正在办理相关手续,手续办好后就可以购买了,但是无法确定到底是什么时候。于是小明记下了售楼处的电话,以后每天都会打电话询问有没有到购买时间,除了小明,可能还会有别人,每天向售楼处咨询同样的问题。显然这是不合理的,实际情况是小明把自己的电话号原创 2022-03-22 22:02:21 · 619 阅读 · 0 评论 -
《JavaScript设计模式与开发实践》——第七章(迭代器模式)学习记录
迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺序访问其中的每个元素。迭代器模式无非就是循环访问聚合对象中的各个元素,比如我们很熟悉的JQuery中的$.each:$.each([1,2,3],function(i,n){ //i为当前索引 //n为当前元素})下面我们来实现一个自己的each函数,同样接受两个参数,一个是被循环的数组,另一个是循原创 2022-03-13 23:07:06 · 790 阅读 · 0 评论 -
《JavaScript设计模式与开发实践》——第六章(代理模式)学习记录
代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。代理模式的关键是,当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问,客户实际上访问的是替身对象。替身对象对请求做出一些处理之后,再把请求转交给本体对象。先从一个小例子开始熟悉代理模式的结构:小明想给小红送一束花,刚好小明和小红(A)有一个共同朋友小丽(B),于是内向的小名决定让小丽代替自己完成送花这件事。先看看不用代理模式的情况:var Flower = function(){} var原创 2022-03-10 23:37:06 · 1178 阅读 · 0 评论 -
《JavaScript设计模式与开发实践》——第五章(策略模式)学习记录
策略模式定义:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。5.1使用策略模式计算奖金策略模式有着广泛的应用,看一下年终奖的计算某公司规定,绩效为S的员工,年终奖有4倍工资,绩效为A的人年终奖有3倍工资,而绩效为B的人年终奖是里倍工资。假设财务部要求我们提供一段代码,来方便他们计算员工的年终奖。1.最初的代码一般我们会这样做:var calculateBonus = function(performanceLevel,salary){ if(performanceL原创 2022-03-05 22:59:53 · 110 阅读 · 0 评论 -
《JavaScript设计模式与开发实践》——第四章(单例模式)学习记录
单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点。在JavaScript开发中,单例模式的用铜同样非常广泛,当我们单击登录按钮的时候,页面中会出现一个登录浮窗,这个浮窗是唯一的,无论单击多少次登录按钮,这个浮窗都只会被创建一次,这个浮窗就很适合用单例模式来创建。4.1实现单例模式其实一个单例模式并不复杂,无非就是用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象:var Singleton = function(name)原创 2022-02-27 12:58:58 · 278 阅读 · 0 评论 -
《javascript设计模式与开发实践》——第三章(闭包和高阶函数)学习记录
3.1闭包闭包的形成与变量的作用域以及变量的生存周期密切相关。我们先来看下这两个前置技能变量的作用域:就是指变量的有效范围,我们在声明一个变量的时候,如果该变量前面没有关键字var,这个变量就是全局变量,这是一种容易造成命名冲突的做法。另一种情况是用var在函数中声明变量,这个时候的变量就是局部变量,只有在该函数内部才能访问这个变量,如下: var func = function(){ var a = 1; alert(a)//1 } func();原创 2022-02-24 22:26:07 · 430 阅读 · 0 评论 -
《JavaScript设计模式与开发实践》——第二章(this、call、apply)学习记录
2.1 thisJavaScript的this总是指向一个对象,而具体指向哪个对象是在运行时给予函数的执行环境动态绑定的,而非函数被声明时的环境。2.1.1this的指向大致可以分为以下四种。作为对象的方法调用。作为普通函数调用。构造器调用。Function.prototype.call或Function.prototype.apply调用。1. 作为对象的方法调用。当函数作为对象的方法被调用时,this指向该对象 var obj = { a:1, getA原创 2022-02-19 10:48:34 · 286 阅读 · 0 评论 -
《javascript设计模式与开发实践》——第一章(面向对象的javascript)学习记录
1.1动态类型语言和鸭子类型编程语言按照数据类型大体可以分为两类,一类是静态语言,另一类是动态语言,在javascript中,当我们对一个变量赋值时,并不需要考虑它的类型,显然javascript是典型的动态类型语言。由于无需进行类型检测,我们可以尝试调用任何对象的任意方法,而无需考虑它原本是否被设计为拥有该方法。这一切都建立在鸭子类型的概念上,鸭子类型的通俗说法是:“如果它走起来像鸭子,叫起来是鸭子,那么它就是鸭子。”通过一个小例子深入理解一下:从前在JavaScript王国里,有一个国王,他觉得原创 2022-02-17 23:20:26 · 600 阅读 · 0 评论