摘要: 享元 flyweight 模式是一种性能优化模式,享元可以理解成共享元对象。享元模式的核心是运用共享技术来有效支持大量细粒度的对象。如果系统中因为创建了大量类似的对象而导致内存占用过高,享元模式的概念听起来不太好理解,我们来看一个例子。 假设爱慕的产品。有 59 种男士内衣,50 件女士内衣。为了推 阅读全文
posted @ 2022-09-16 17:58 艾路 阅读(13) 评论(0) 推荐(0) 编辑
摘要: 在 js 开发中用到继承的场景其实并不很多,很多时候我们都喜欢用 min-in 的方式给对象扩展属性。但这不代表继承在 js 里没有用武之地,我们可以通过 prototype 来变相的实现继承。我们讨论一种基于继承的设计模式-模版方法模式。 模版方法模式是一种只需要使用继承就可以实现的非常简单的模式 阅读全文
posted @ 2022-09-16 17:56 艾路 阅读(27) 评论(0) 推荐(0) 编辑
摘要: 组合模式,我们在第 9 章命令模式中将结果宏命令的结构和作用。宏命令对象包含了一组子命令对象,不管是宏命令对象,还是子命令对象,都有一个 execute 方法负责执行命令。 var closeDoorCommand = { execute: function () { console.log('关门 阅读全文
posted @ 2022-09-16 11:14 艾路 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 命令模式。假设有一个快餐店,而我是该餐厅的点餐服务员,那么我一天的工作应该是这样的:当某位客人点餐或者打来订餐电话后,我会把他的需求都写在清单上,然后交给厨房,客人不用关心是哪些厨师帮他炒菜。我们餐厅还可以满足客人需要的定时服务,比如客人可能当前在回家的路上,要求一个小时后才开始炒他的菜,只要订单还 阅读全文
posted @ 2022-09-16 11:12 艾路 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 发布订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都将得到通知。发布订阅模式又显而易见的优点。这个模式可以广泛应用于异步编程中,这是一种替代传递回调函数的方案,比如,我们可以订阅 ajax 请求中的 err,success 事件。第二点说明一 阅读全文
posted @ 2022-09-16 11:11 艾路 阅读(19) 评论(0) 推荐(0) 编辑
摘要: 迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺序访问其中的每个元素。 我们来实现一个 each 函数,each 函数接受两个参数,第一个为被循环的数 阅读全文
posted @ 2022-09-16 11:10 艾路 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。生活中也可以找到很多代理模式的场景。比如:明星都有经纪人作为代理。如果想要请明星办一场演出,只能联系他的经纪人。经纪人会把商业演出的细节和报酬谈好后,把合同交给明星。代理模式的关键是,当客户不方便直接访问一个对象时或者不满足需要时候,提 阅读全文
posted @ 2022-09-16 11:10 艾路 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 策略模式,俗话说,条条大路通罗马。现实中我们去一个地方,也可以根据多种情况选择路线。在程序中也会有类似的情况,要实现某一个功能有多种方案可以选择。比如压缩算法,可以用 zip 算法,也可以选择 gzip 算法。这些算法灵活多样,而且可以随意互相替换。这种解决方案就是策略模式。策略模式的定义是:定义一 阅读全文
posted @ 2022-09-16 11:09 艾路 阅读(41) 评论(0) 推荐(0) 编辑
摘要: 单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式是一种常用的模式,我们点击登录按钮的时候,页面会出现一个登录浮窗,而这个登录浮窗是唯一的,无论单击多少次登录按钮,这个浮窗都只会创建一次,那这个登录浮窗就适合用单例模式来创建。 要实现一个标准的单例模式并不复杂,无非是用 阅读全文
posted @ 2022-09-16 11:08 艾路 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 高阶函数是指至少满足下列条件之一的函数:函数可以作为参数被传递,函数可以作为返回值输出。首先是把函数作为参数传递,这代表我们可以抽离一部分容易变化的业务逻辑,把这部分业务逻辑放在函数参数中,这样以来可以分离业务中变化与不变的部分。其中一个重要应用场景就是常见的回调函数。 在 ajax 异步请求的应用 阅读全文
posted @ 2022-09-16 11:08 艾路 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 我们接下来讲下封装封装的目的是将信息隐藏。一般而言,我们讨论的封装是封装数据和封装实现。我们还会聊下封装类型和封装变化。这个和我们常说的闭包很像。在 java 中就是用 private,public,protected 等关键字来提供不同的访问权限。但 js 并没有提供对这些关键字的支持,除了 le 阅读全文
posted @ 2022-09-16 11:07 艾路 阅读(22) 评论(0) 推荐(0) 编辑
摘要: 设计模式的定义是:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案。通俗一点说,设计模式是在某种场合下对某个问题的一种解决方案。再通俗点,设计模式是给面向对象开发中一些好的设计取个名字。我们都知道设计经验非常重要。也许你有过这种感觉:这个问题发生的场景似曾相识,以前我遇到并解决过这个问题, 阅读全文
posted @ 2022-09-16 11:07 艾路 阅读(42) 评论(0) 推荐(0) 编辑
摘要: 兔子很聪明。**若有所思的说。“是的,”*猪说,“兔子很聪明。”“他有头脑”。是的,*猪说,兔子有脑子。沉默了很长时间。我想,**说,这就是他什么都不懂的原因。《****》 我们都会时不时犯错。没有人总是编写完美无缺的代码。所以当你意识到自己编写了一些愚蠢的代码,或者做了一个愚蠢的设计时,不要不知所 阅读全文
posted @ 2022-09-16 10:06 艾路 阅读(40) 评论(0) 推荐(0) 编辑
摘要: 11章讲了单元测试相关的优点和方法,我作为一个混了10年开发的人,从来没有写过单元测试,这个应该是一种耻辱吧,不过说实话,小公司要求工期,能实现功能的同时做好扩展和优化也已经花费很多时间了,我业余时间很少看工作相关的东西,这可能也是我一直都是半吊子的原因吧。最近在看自尊相关的书籍,里面说对自己批评, 阅读全文
posted @ 2022-09-16 10:01 艾路 阅读(41) 评论(0) 推荐(0) 编辑