设计模式
yufawu
输出倒逼输入!
展开
-
JavaScript的面向对象--封装的实现、类型、变化
封装的目的是将信息隐藏。一般而言,我们讨论的封装是封装数据和封装实现。这里将讨论更广义的封装,不仅包括封装数据和封装实现,还包括封装类型和封装变化。封装数据在许多语言的对象系统中,封装数据是由语法解析来实现的,这些语言也许提供了private、public、protected等关键字来提供不同的访问权限。但JavaScript并没有提供对这些关键字的支持,我们只能依赖变量的作用域来实现封装特...原创 2019-01-13 19:41:57 · 1462 阅读 · 0 评论 -
JavaScript设计模式之装饰者模式
在程序开发中,许多时候都并不希望某个类天生就非常庞大,一次性包含许多职责。那么我们就可以使用装饰者模式。装饰者模式可以动态地给某个对象添加一些额外的职责,而不会影响从这个类中派生的其他对象。在传统的面向对象语言中,给对象添加功能常常使用继承的方式,但是继承的方式并不灵活,还会带来许多问题:一方面会导致超类和子类之间存在强耦合性,当超类改变时,子类也会随之改变;另一方面,继承这种功能复用方式通常被...原创 2019-01-29 21:48:30 · 244 阅读 · 0 评论 -
JavaScript设计模式之中介者模式
在我们生活的世界中,每个人每个物体之间都会产生一些错综复杂的联系。在应用程序里也是一样,程序由大大小小的单一对象组成,所有这些对象都按照某种关系和规则来通信。平时我们大概能记住10个朋友的电话、30家餐馆的位置。在程序里,也许一个对象会和其他10个对象打交道,所以它会保持10个对象的引用。当程序的规模增大,对象会越来越多,它们之间的关系也越来越复杂,难免会形成网状的交叉引用。当我们改变或删除其中...原创 2019-01-28 21:44:11 · 2458 阅读 · 0 评论 -
JavaScript设计模式之发布—订阅模式
发布—订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。在JavaScript开发中,我们一般用事件模型来替代传统的发布—订阅模式。现实中的发布-订阅模式不论是在程序世界里还是现实生活中,发布—订阅模式的应用都非常之广泛。我们先看一个现实中的例子。小明最近看上了一套房子,到了售楼处之后才被告知,该楼盘的房子早已售罄。好在售...原创 2019-01-22 22:41:29 · 2875 阅读 · 0 评论 -
JavaScript设计模式之职责链模式
职责链模式的定义是:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。职责链模式的名字非常形象,一系列可能会处理请求的对象被连接成一条链,请求在这些对象之间依次传递,直到遇到一个可以处理它的对象,我们把这些对象称为链中的节点,如图13-1所示。现实中的职责链模式职责链模式的例子在现实中并不难找到,...原创 2019-01-27 18:20:10 · 1252 阅读 · 0 评论 -
JavaScript设计模式之适配器模式
适配器模式的作用是解决两个软件实体间的接口不兼容的问题。使用适配器模式之后,原本由于接口不兼容而不能工作的两个软件实体可以一起工作。适配器的别名是包装器(wrapper),这是一个相对简单的模式。在程序开发中有许多这样的场景:当我们试图调用模块或者对象的某个接口时,却发现这个接口的格式并不符合目前的需求。这时候有两种解决办法,第一种是修改原来的接口实现,但如果原来的模块很复杂,或者我们拿到的模块...原创 2019-01-31 23:48:29 · 150 阅读 · 0 评论 -
JavaScript设计模式之享元模式
享元(flyweight)模式是一种用于性能优化的模式,“fly”在这里是苍蝇的意思,意为蝇量级。享元模式的核心是运用共享技术来有效支持大量细粒度的对象。如果系统中因为创建了大量类似的对象而导致内存占用过高,享元模式就非常有用了。在JavaScript中,浏览器特别是移动端的浏览器分配的内存并不算多,如何节省内存就成了一件非常有意义的事情。享元模式的概念初听起来并不太好理解,所以在深入讲解之前...原创 2019-01-26 22:51:12 · 2423 阅读 · 0 评论 -
JavaScript设计模式之迭代器模式
迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺序访问其中的每个元素。目前,恐怕只有在一些“古董级”的语言中才会为实现一个迭代器模式而烦恼,现在流行的大部分语言如Java、Ruby等都已经有了内置的迭代器实现,许多浏览器也支持JavaScript的...原创 2019-01-21 22:10:00 · 1558 阅读 · 0 评论 -
JavaScript设计模式之模板方法模式
在JavaScript开发中用到继承的场景其实并不是很多,很多时候我们都喜欢用mix-in的方式给对象扩展属性。但这不代表继承在JavaScript里没有用武之地,虽然没有真正的类和继承机制,但我们可以通过原型prototype来变相地实现继承。不过这里并非要讨论继承,而是讨论一种基于继承的设计模式——模板方法(Template Method)模式。模板方法模式的定义和组成模板方法模式是一种...原创 2019-01-26 09:42:51 · 1293 阅读 · 0 评论 -
JavaScript设计模式之代理模式
代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。代理模式是一种非常有意义的模式,在生活中可以找到很多代理模式的场景。比如,明星都有经纪人作为代理。如果想请明星来办一场商业演出,只能联系他的经纪人。经纪人会把商业演出的细节和报酬都谈好之后,再把合同交给明星签。代理模式的关键是,当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问,客户实际上访问...原创 2019-01-20 17:25:35 · 1483 阅读 · 0 评论 -
JavaScript设计模式之组合模式
我们知道地球和一些其他行星围绕着太阳旋转,也知道在一个原子中,有许多电子围绕着原子核旋转。我曾经想象,我们的太阳系也许是一个更大世界里的一个原子,地球只是围绕着太阳原子的一个电子。而我身上的每个原子又是一个星系,原子核就是这个星系中的恒星,电子是围绕着恒星旋转的行星。一个电子中也许还包含了另一个宇宙,虽然这个宇宙还不能被显微镜看到,但我相信它的存在。也许这个想法有些异想天开,但在程序设计中,也有...原创 2019-01-25 02:11:43 · 1449 阅读 · 0 评论 -
JavaScript设计模式之策略模式
在程序设计中,我们也常常遇到类似的情况,要实现某一个功能有多种方案可以选择。比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法。这些算法灵活多样,而且可以随意互相替换。这种解决方案就是将要介绍的策略模式。策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。使用策略模式计算奖金策略模式有着广泛的应用。这里我们就以年终奖的计算为例进行介绍。很多...原创 2019-01-20 09:17:37 · 2061 阅读 · 0 评论 -
JavaScript设计模式之单例模式
单例模式的定义是:保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池、全局缓存、浏览器中的window对象等。在JavaScript开发中,单例模式的用途同样非常广泛。试想一下,当我们单击登录按钮的时候,页面中会出现一个登录浮窗,而这个登录浮窗是唯一的,无论单击多少次登录按钮,这个浮窗都只会被创建一次,那么这个登录浮窗就适合用...原创 2019-01-19 22:21:18 · 1230 阅读 · 0 评论 -
JavaScript设计模式之命令模式
假设有一个快餐店,而我是该餐厅的点餐服务员,那么我一天的工作应该是这样的:当某位客人点餐或者打来订餐电话后,我会把他的需求都写在清单上,然后交给厨房,客人不用关心是哪些厨师帮他炒菜。我们餐厅还可以满足客人需要的定时服务,比如客人可能当前正在回家的路上,要求1个小时后才开始炒他的菜,只要订单还在,厨师就不会忘记。客人也可以很方便地打电话来撤销订单。另外如果有太多的客人点餐,厨房可以按照订单的顺序排队...原创 2019-01-24 00:17:00 · 1937 阅读 · 0 评论 -
JavaScript设计模式之状态模式
状态模式是一种非同寻常的优秀模式,它也许是解决某些需求场景的最好方法。虽然状态模式并不是一种简单到一目了然的模式(它往往还会带来代码量的增加),但你一旦明白了状态模式的精髓,以后一定会感谢它带给你的无与伦比的好处。状态模式的关键是区分事物内部的状态,事物内部状态的改变往往会带来事物的行为改变。初识状态模式我们来想象这样一个场景:有一个电灯,电灯上面只有一个开关。当电灯开着的时候,此时按下开关...原创 2019-01-30 21:54:06 · 253 阅读 · 0 评论