文章分类 -  javascript设计模式

摘要:适配器模式是一种相对简单的模式,主要作用是为了解决两个软件模块的接口之间不兼容的问题。 适配器属于包装模式的一种。 var googleMap = { show:function(){ console.log('render map') } } var baiduMap = { display:fu 阅读全文
posted @ 2016-02-24 14:58 倾其一生 阅读(93) 评论(0) 推荐(0)
摘要:态模式是一种容易被忽略或者被低估的模式,但却是一种非同寻常的优秀模式。一般对象都会有一些状态,而状态的改变往往会影响对象的行为。平时工作中,我们倾向于在对象中对状态做if else判断,而后去执行相应的动作。例如电灯对象的开关两种状态的切换。当我们试图用状态模式去重构一般实现的时候,便会发现状态模式 阅读全文
posted @ 2016-02-24 14:08 倾其一生 阅读(1033) 评论(0) 推荐(0)
摘要:装饰者模式的作用是为对象动态添加职责,在js中,也可以为函数动态添加职责,为函数添加职责,通过AOP来实现。 var plane = { fire:function(){ console.log('发射子弹') } } var missileDecorator = function(){ conso 阅读全文
posted @ 2016-02-24 11:02 倾其一生 阅读(129) 评论(0) 推荐(0)
摘要:中介者模式主要用来解耦对象与对象之间的耦合关系。当系统中有大量的对象互相调用时候,容易形成网状多对多的层次关系,一旦某个对象状态发生改变,要同时修改与其有交互关系的其他对象,这必然是难以维护的。对象的复用性也差了许多。通过引入中介者对象,来维护各个对象之间的关系,把网状多对多关系变为中介对象和其他所 阅读全文
posted @ 2016-02-23 21:55 倾其一生 阅读(110) 评论(0) 推荐(0)
摘要:职责链模式定义: 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 在javascript开发中,职责链模式是最容易被忽视的模式之一。但实际上只要运用得到,职责链模式可以很好的帮助我们管理代码,降低发起请求的对象和处理请求的对象之间的耦合性。 最大优点:解耦了请求发送者和N个 阅读全文
posted @ 2016-02-20 13:56 倾其一生 阅读(121) 评论(0) 推荐(0)
摘要:享元(flyweight)模式 是一种用户性能优化的模式。核心是运用共享技术来有效支持大量细粒度的对象。 享元模式的关键是区分对象的内部状态和外部状态,并把它们分离开来。 一般来说,发生以下情况时使用享元模式,才能为我们带来最大好处 1.程序中使用了大量相似的对象 2.由于使用了大量对象,造成了很大 阅读全文
posted @ 2016-02-20 11:11 倾其一生 阅读(96) 评论(0) 推荐(0)
摘要:模板方法模式,是众多设计模式中,为数不多的依赖继承的一种设计模式。需要一个抽象类,封装子类的算法框架和方法的执行顺序,子类继承父类之后,父类通知子类执行这些方法。父类的通知方法,即是模板方法。 模板方法模式是一种典型的通过封装变化提高系统扩展性的模式。 // 传统的面向对象语言的继承方式 var B 阅读全文
posted @ 2016-02-19 17:13 倾其一生 阅读(71) 评论(0) 推荐(0)
摘要:// 组合模式适用条件,用来表示部分-整体层次关系的时候,或者客户期待用一致的方式去对待组合对象和叶子对象的时候 var Folder = function(name){ this.name = name this.files = [] } Folder.prototype.add = functi 阅读全文
posted @ 2016-02-19 15:13 倾其一生 阅读(72) 评论(0) 推荐(0)
摘要:命令模式定义:解耦请求接收者和请求发送者,将请求封装为命令对象。 //传统面向对象设计的命令模式 var door = { open:function(){ console.log('open') }, close:function(){ console.log('close') } } var c 阅读全文
posted @ 2016-02-19 13:42 倾其一生 阅读(165) 评论(0) 推荐(0)
摘要:发布-订阅模式又被称作观察者模式,顾名思义,需要有一个观察者对象,负责消息的订阅和消息的发布。从而降低两个互依赖对象直接的耦合。 全局的发布-订阅事件对象 var Event = (function({ var cache ={},listen,trigger,remove; listen = fu 阅读全文
posted @ 2016-02-19 11:20 倾其一生 阅读(86) 评论(0) 推荐(0)
摘要:迭代器模式定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。 迭代器模式的应用举例,根据不同的浏览器获取相应的上传组件对象 var getActiveUpload = function(){ try{ return new ActiveXObject("TXFTNA 阅读全文
posted @ 2016-02-18 17:16 倾其一生 阅读(97) 评论(0) 推荐(0)
摘要:代理模式是非常常用的一种模式,顾名思义,为两个对象之间添加一层代理,通过代理访问想要访问的对象,而不是直接去访问或修改。 虚拟代理 //图片预加载代理 var myImg= (function(){ var imgnode = document.createElement('img') docume 阅读全文
posted @ 2016-02-18 12:08 倾其一生 阅读(105) 评论(0) 推荐(0)
摘要:策略模式的定义:定义一系列,并把它们一个个封装起来,并使它们可以互相替换。 从定义可以看出,策略模式至少需要两部分。一部分是策略类,封装具体算法,负责具体的计算过程。一部分是环境类context,context接受客户请求,并将请求委托给某个策略类。 传统面向对象实现方式: var performa 阅读全文
posted @ 2016-02-18 11:39 倾其一生 阅读(118) 评论(0) 推荐(0)
摘要:单例模式的定义:保证一个类只有一个实例,并且提供一个可以访问它的全局访问点。 以类为中心的传统面向对象语言的单例模式实现: 普通单例模式: var Singleton = function(name){ this.name = name; this.instance = null; } Single 阅读全文
posted @ 2016-02-18 11:19 倾其一生 阅读(96) 评论(0) 推荐(0)
摘要:何为高阶函数?至少满足下列条件之一的函数:函数可以作为参数被传递;函数可以作为返回值输出。 作为参数被传递,代表我们可以抽离一部分容易变化的业务逻辑,把这部分逻辑放在函数参数中,可以分离业务代码中变化与不变的部分。其中很重要的一个应用场景就是回调函数。 作为返回值输出,相比当作参数传递,函数当作返回 阅读全文
posted @ 2016-02-17 12:11 倾其一生 阅读(193) 评论(0) 推荐(0)
摘要:何为闭包? 闭包的本质在于函数的变量作用域。正由于函数体内变量作用域的生存周期形成了闭包环境。 如何实现闭包? 以命令模式为例,命令模式的意图是封装请求为对象,从而分离请求的发起者和请求的接收者之间的耦合关系。命令执行之前,可以预先在命令对象中植入命令的接收者。 var tv = { open : 阅读全文
posted @ 2016-02-17 09:49 倾其一生 阅读(100) 评论(0) 推荐(0)
摘要:js中this总是指向一个对象,但是具体指向哪个对象是根据运行时基于函数的执行环境动态绑定的,而非函数被声明时的环境/ this的指向大致分为四种: 1.作为对象的方法调用 2.作为普通函数调用 3.构造器调用 4.Function.prototype.call 和 Function.prototy 阅读全文
posted @ 2016-02-16 22:25 倾其一生 阅读(103) 评论(0) 推荐(0)
摘要:js多态和封装 《重构:改善即有代码的设计》里这样描述多态,多态的最根本好处在于,你不必再向对象询问你是什么类型而后根据得到的答案调用对象的某个行为-你只管调用该行为就是了,其他的一切多态机制都会为你安排妥当。 换句话说:多态最根本的作用就是通过把过程化的条件分支语句转化为对象的多态性,从而消除条件 阅读全文
posted @ 2016-02-15 21:41 倾其一生 阅读(107) 评论(0) 推荐(0)
摘要:开篇 模式的根本原则: 所有设计模式的实现都遵循一条设计原则,即 “找出程序中变化的地方,并将变化封装起来。” 分辨模式的关键: 分辨模式的关键是意图而不是结构。很多模式的结构看起来总是一样的,但是却被称作不同的模式,根本原因,他们的设计意图是完全不一样的。 javascript设计模式和其他强类型 阅读全文
posted @ 2016-01-30 14:45 倾其一生 阅读(62) 评论(0) 推荐(0)