JavaScript设计模式
文章平均质量分 59
熟悉设计模式,会对其产生条件反射。在适合的场景出现时,可以很快地找到某种模式作为解决方案。该专栏将常用的JavaScript设计模式与项目实战相结合,给出完整可运行示例供参考。
奋飛
乐观、勇气、专注、果断、好奇、公正、慎思、真诚、追求极致追求完美、诚信!独立撰写了多个前端专题模块,访问量达百万级。多次负责组织大数据可视化前端架构平台开发工作。对前端新技术、新潮流具有很强的敏锐力和洞察力!
展开
-
JavaScript设计模式--状态模式
状态模式的关键是区分事物内部的状态,事物内部状态的改变往往会带来事物的行为改变。 当电灯开着,此时按下开关,电灯会切换到关闭状态;再按一次开关,电灯又将被打开。同一个开关在不同的状态下,表现出来的行为是不一样的。一、有限状态机状态总数(state)是有限的。任一时刻,只处在一种状态之中。某种条件下,会从一种状态转变(transition)到另一种状态。允许一个对象在其内部状态改变时改变原创 2015-12-20 19:58:04 · 4304 阅读 · 5 评论 -
JavaScript设计模式--装饰者模式
有时我们不希望某个类天生就非常庞大,一次性包含许多职责。那么我们就可以使用装饰着模式。 装饰着模式可以动态地给某个对象添加一些额外的职责,从而不影响这个类中派生的其他对象。 装饰着模式将一个对象嵌入另一个对象之中,实际上相当于这个对象被另一个对象包装起来,形成一条包装链。一、不改动原函数的情况下,给该函数添加些额外的功能1. 保存原引用window.onload = function() {原创 2015-12-20 19:50:10 · 2087 阅读 · 0 评论 -
JavaScript设计模式--中介者模式
一、定义面向对象设计鼓励将行为分布到各个对象中,把对象划分成更小的粒度,有助于增强对象的可复用性。但由于这些细粒度对象之间的联系激增,又可能反过来降低它们的可复用性。 中介者模式的作用就是解除对象与对象之间的紧耦合关系。二、示例:购买商品 假设我们正在开发一个购买手机的页面,购买流程中,可以选择手机颜色以及输入购买数量,同时页面中可以对应展示输入内容。还有一个按钮动态显示下一步操作(该颜色库存原创 2015-12-20 19:45:32 · 1957 阅读 · 2 评论 -
JavaScript设计模式--责任链模式
一、定义责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系,将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。二、示例 假设这么一个场景: 我们负责一个售卖手机的电商网站,经过分别缴纳500元定金和200元定金的两轮预定后,到了正式购买阶段。针对预定用户实行优惠,支付过500元定金的用户会收到100元的商城优惠券,支付过200元定金的用原创 2015-12-20 19:40:08 · 3150 阅读 · 0 评论 -
JavaScript设计模式--享元模式
一、定义享元(flyweight)模式是一种用于性能优化的模式,核心是运用共享技术来有效支持大量细刻度的对象。 在JavaScript中,浏览器特别是移动端的浏览器分配的内存并不算多,如何节省内存就成了一个非常有意义的事情。 享元模式是一种用时间换空间的优化模式 内衣工厂有100种男士内衣、100中女士内衣,要求给每种内衣拍照。如果不使用享元模式则需要200个塑料模特;使用享元模式,只需要男原创 2015-12-20 19:34:47 · 2082 阅读 · 3 评论 -
JavaScript设计模式--模板方法模式
一、定义模板方法是基于继承的设计模式,可以很好的提高系统的扩展性。 java中的抽象父类、子类 模板方法有两部分结构组成,第一部分是抽象父类,第二部分是具体的实现子类。二、示例Coffee or Tea (1) 把水煮沸 (2) 用沸水浸泡茶叶 (3) 把茶水倒进杯子 (4) 加柠檬/* 抽象父类:饮料 */var Beverage = function(){};// (1) 把水煮沸原创 2015-12-20 19:29:32 · 2187 阅读 · 2 评论 -
JavaScript设计模式--观察者模式
一、定义观察者模式(发布-订阅模式):其定义对象间一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知。 在JavaScript中,一般使用事件模型来替代传统的观察者模式。 好处: (1)可广泛应用于异步编程中,是一种替代传递回调函数的方案。 (2)可取代对象之间硬编码的通知机制,一个对象不用再显示地调用另外一个对象的某个接口。两对象轻松解耦。二、DOM事件–观察原创 2015-12-20 19:22:57 · 7380 阅读 · 7 评论 -
JavaScript设计模式--迭代器模式
迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 JavaScript中的Array.prototype.forEach一、jQuery中的迭代器$.each([1, 2, 3], function(i, n) { console.log("当前下标为:"+ i + " 当前元素为:"+ n );});二、实现自己的迭代器var each =原创 2015-12-20 19:16:55 · 2167 阅读 · 0 评论 -
JavaScript设计模式--代理模式
明星都有经纪人作为代理。如果请明星办一场商演,只能联系其经纪人,经纪人会把商演的细节和报酬谈好,再把合同交给明星签。一、定义代理模式:为一个对象提供一个代用品或占位符,以便控制对它的访问。代理分为:保护代理和虚拟代理 保护代理:用于控制不同权限的对象对目标对象的访问,在JavaScript中很难判断谁访问了某个对象,所以保护代理很难实现。二、图片预加载(最常见的虚拟代理应用场景)图片预加载是一种常原创 2015-12-20 19:10:04 · 1808 阅读 · 0 评论 -
JavaScript设计模式--策略模式
把不变的部分和变化的部分隔开是每个设计模式的主题。条条大路通罗马。我们经常会遇到解决一件事情有多种方案,比如压缩文件,我们可以使用zip算法、也可以使用gzip算法。其灵活多样,我们可以采用策略模式解决。一、定义定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。 基于策略类模式的程序至少由两部分组成。第一个部分是一组策略类,策略类封装了具体的算法,并负责具体的计算过程。第二个部分是环原创 2015-12-20 18:58:26 · 1914 阅读 · 0 评论 -
JavaScript设计模式--单例模式
一、定义保证一个类仅有一个实例,并提供一个访问它的全局访问点。当单击登陆按钮,页面中出现一个登陆浮窗,这个登陆浮窗是唯一的,无论单击多少次登陆按钮,这个浮窗都只会被创建一次,那么这个登陆浮窗就适合用单例模式来创建。二、实现原理要实现单例并不复杂,使用一个变量来标志当前是否已经为某个类创建过对象,如果是,则在下一次获取该类的实例时,直接返回之前创建的对象。三、假单例全局变量不是单例模式,但在JavaS原创 2015-12-20 18:52:34 · 2166 阅读 · 0 评论 -
JavaScript设计模式--前奏
最近阅读了《JavaScript设计模式与开发实践》(2015年度最佳推荐),收获颇多,自己对设计模式有了全新的了解和认识。在项目实践中也用到了一些,感觉很不错。 设计模式应遵守的原则: (1)最少知识原则:一个软件实体应当尽可能少地与其他实体发生相互作用(把对象划分成较小的粒度,以便提高复用性) (2)开放-封闭原则:软件实体(类、模块、函数)等应该是可以扩展的,但是不可修改。一、原型模式J原创 2015-12-20 18:38:34 · 1845 阅读 · 0 评论