`

JavaScript常用的设计模式

 
阅读更多

来自:http://developer.51cto.com/art/201210/361810.htm 

http://www.alloyteam.com/2012/10/common-javascript-design-patterns/

 

个人感觉JS设计模式类似于Java设计模式,关于模式的概念可参照java设计模式。

此处只是简单复制相应的js codes,便于理解。

 

单例模式

 

var mask; 
var createMask = function(){ 
if ( mask ) return mask; 
else{ 
mask = document,body.appendChild(  document.createElement(div)  ); 
return mask; 
} 
} 

 

 

简单工厂模式

 

       function A( name ){ 
              this.name = name; 
       } 
       function ObjectFactory(){ 
              var obj = {}, 
                     Constructor = Array.prototype.shift.call( arguments ); 
obj.__proto__ =  typeof Constructor .prototype === 'number'  ? Object.prototype 
:  Constructor .prototype;  
              var ret = Constructor.apply( obj, arguments ); 
              return typeof ret === 'object' ? ret : obj; 
       } 
       var a = ObjectFactory( A, 'svenzeng' ); 
       alert ( a.name );  //svenzeng 

 

 

观察者模式

 

div.onclick  =  function click (){ 
   alert ( ''click' ) 
} 

 

 

适配器模式

适配器模式的作用很像一个转接口。

在程序里适配器模式也经常用来适配2个接口, 比如你现在正在用一个自定义的js库. 里面有个根据id获取节点的方法$id(). 有天你觉得jquery里的$实现得更酷, 但你又不想让你的工程师去学习新的库和语法. 那一个适配器就能让你完成这件事情$id = function( id ){ 

  return jQuery( '#' + id )[0]; 
} 

 

 

代理模式

代理模式的定义是把对一个对象的访问, 交给另一个代理对象来操作.

 

var request = Ajax.get( 'cgi.xx.com/xxx' ); 
request.send(); 
request.done(function(){ 
});

 

 

 

桥接模式

桥接模式的作用在于将实现部分和抽象部分分离开来, 以便两者可以独立的变化。在实现api的时候, 桥接模式特别有用

var singleton = function( fn ){ 
    var result; 
    return function(){ 
        return result || ( result = fn .apply( this, arguments ) ); 
    } 
}<span id="more-3614"></span> 
var createMask = singleton( function(){ 
return document.body.appendChild( document.createElement('div') ); 
 }) 

 

singleton是抽象部分, 而createMask是实现部分

外观模式

外观模式(门面模式),是一种相对简单而又无处不在的模式。外观模式提供一个高层接口,这个接口使得客户端或子系统更加方便调用。

var stopEvent = function( e ){   //同时阻止事件默认行为和冒泡 
  e.stopPropagation(); 
  e.preventDefault(); 
} 

 

访问者模式

 

利用访问者,对访问的元素进行某些操作时,只需将此对象作为参数传递给当前访问者,然后,访问者会依据被访问 者的具体信息,进行相关的操作。

利用访问者,我们来做个有趣的事情. 给一个object对象增加push方法.

var Visitor = {} 
Visitor .push  =  function(){ 
    return Array.prototype.push.apply( this, arguments ); 
} 
var obj = {}; 
obj.push = Visitor .push; 
obj.push( '"first" ); 
alert ( obj[0] )  //"first" 
alert ( obj.length );  //1 

 

策略模式

策略模式的意义是定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。
一个小例子就能让我们一目了然。

回忆下jquery里的animate方法.

$( div ).animate( {"left: 200px"}, 1000, 'linear' );  //匀速运动 
$( div ).animate( {"left: 200px"}, 1000, 'cubic' );  //三次方的缓动 

 

模版方法模式

 

模式方法是预先定义一组算法,先把算法的不变部分抽象到父类,再将另外一些可变的步骤延迟到子类去实现。听起来有点像工厂模式( 非前面说过的简单工厂模式 ).

最大的区别是,工厂模式的意图是根据子类的实现最终获得一种对象. 而模版方法模式着重于父类对子类的控制.

十一 中介者模式

中介者对象可以让各个对象之间不需要显示的相互引用,从而使其耦合松散,而且可以独立的改变它们之间的交互。

var mode1 = Mode.create(),  mode2 = Mode.create(); 
var view1 = View.create(),   view2 = View.create(); 
var controler1 = Controler.create( mode1, view1, function(){ 
  view1.el.find( ''div' ).bind( ''click', function(){ 
    this.innerHTML = mode1.find( 'data' ); 
  } ) 
}) 
var controler2 = Controler.create( mode2 view2, function(){ 
  view1.el.find( ''div' ).bind( ''click', function(){ 
    this.innerHTML = mode2.find( 'data' ); 
  } ) 
})

 

 

十二 迭代器模式

迭代器模式提供一种方法顺序访问一个聚合对象中各个元素,而又不需要暴露该方法中的内部表示。

forEach = function( ary, fn ){  for ( var i = 0, l = ary.length; i < l; i++ ){    var c = ary[ i ];    if ( fn.call( c, i , c ) === false ){      return false;    }   }} 
forEach( [ 1, 2, 3 ], function( i, n ){ 
  alert ( i ); 
}) 

 

 

十三 组合模式

组合模式又叫部分-整体模式,它将所有对象组合成树形结构。使得用户只需要操作最上层的接口,就可以对所有成员做相同的操作。

e.g. $( ‘body’ ).unbind( ‘*’ );

十四 备忘录模式

备忘录模式在js中经常用于数据缓存. 比如一个分页控件, 从服务器获得某一页的数据后可以存入缓存。以后再翻回这一页的时候,可以直接使用缓存里的数据而无需再次请求服务器。

var Page = function(){ 
   var page = 1, 
      cache = {}, 
      data; 
   return function( page ){ 
      if ( cache[ page ] ){ 
               data =  cache[ page ]; 
               render( data ); 
      }else{ 
               Ajax.send( 'cgi.xx.com/xxx', function( data ){ 
                   cache[ page ] = data; 
                   render( data ); 
               }) 
      } 
    } 
}() 

 

 

十五 职责链模式

十六 享元模式

 

十七 状态模式

//todo

 

 

 

 

分享到:
评论

相关推荐

    JavaScript设计模式与开发实践.pdf

    "JavaScript设计模式与开发实践.pdf" 本书《JavaScript设计模式与开发实践》是JavaScript语言的设计模式和开发实践的指南,旨在帮助初、中、高级Web前端开发人员和想往架构师晋级的中高级程序员,掌握JavaScript...

    JavaScript设计模式.pdf

    JavaScript设计模式.pdf JavaScript设计模式是指在软件开发中使用JavaScript语言编写的设计模式。这些设计模式旨在提高代码的重用性、可读性、维护性和扩展性。以下是JavaScript设计模式的知识点总结: 1. 单体...

    JAVASCRIPT设计模式[收集].pdf

    在现代前端开发中,JavaScript设计模式已经成为了一门必修课程。它不仅能够提升开发者的编码效率,而且还能保证编写的代码更加健壮、可维护。本文将对JavaScript设计模式的核心概念进行深入探讨,以期帮助开发者更好...

    学用 JavaScript 设计模式.pdf

    外文翻译:学用JavaScript设计模式,pdf版本,中文版 设计模式是可重用的用于解决软件设计中一般问题的方案。设计模式如此让人着迷,以至在任何编程语言中都有对其进行的探索。 其中一个原因是它可以让我们站在巨人...

    javascript 设计模式简化版

    包括面向对象,面向对象编程思想,javascript面向对象,设计模式通俗版,快速进入模式学习与实践。

    JavaScript高级与设计模式.zip

    接下来,我们讨论JavaScript设计模式。设计模式是在特定场景下解决问题的通用、可重用的解决方案。在JavaScript中,常见的设计模式有: 1. **单例模式(Singleton)**:确保一个类只有一个实例,并提供一个全局访问...

    javascript 面向对象编程.pdf javascript 设计模式与开发实践.pdf

    面向对象编程(Object-Oriented Programming, OOP)是JavaScript中的核心概念,而设计模式则是解决常见编程问题的经验总结,对于提升代码质量和可维护性至关重要。这两本书——"JavaScript 面向对象编程.pdf"和...

    design_pattern:javascript常用设计模式

    设计模式体现: 代理模式:由于一个对象不能直接引用另一个对象,所以需要通过代理对象在这两个对象之间起到中介的作用。 迭代器模式:在不暴露对象内部结构的同时,可以顺序地访问聚合对象内部的元素。 单例模式:...

    Javascript 设计模式系统讲解与应用视频资源地址.7z

    JavaScript设计模式是编程实践中的一种重要思想,它提供了一套经过时间考验的最佳实践,用来解决常见的编程问题和提高代码的可维护性、可扩展性和可复用性。在JavaScript这种动态类型的脚本语言中,设计模式尤其重要...

    Javascript 设计模式系统讲解与应用

    在深入探讨《JavaScript设计模式系统讲解与应用》的内容之前,我们先来了解一下设计模式的基本概念以及为什么它对于前端开发人员尤为重要。设计模式是一套被反复使用的、经过分类编目的、包含结构化的解决方案,用于...

    JavaScript常见设计模式视频教程下载

    JavaScript常见设计模式

    JavaScript设计模式与开发实践_himppf_js_jspremise_精通javascript_Js设计模式_

    JavaScript设计模式与开发实践是深入理解并提升JavaScript编程能力的关键领域。设计模式是对在软件设计中经常出现的问题的解决方案的描述,它代表了最佳实践,是经验丰富的开发者们经过时间检验后总结出来的解决常见...

    Javascript 设计模式之构造函数模式.zip

    JavaScript设计模式是编程实践中一种优秀的代码组织方式,它总结了在特定场景下解决常见问题的最佳实践。构造函数模式是JavaScript中的一种重要设计模式,用于创建对象。本文将深入探讨构造函数模式及其应用。 构造...

    基于JavaScript的前端常用设计模式与源码解析

    本项目深入解析了前端开发中常用的设计模式,通过21个文件组成的案例库,其中包括18个JavaScript源码文件,旨在帮助开发者更好地理解和应用这些设计模式。项目文件还包括1个Git忽略文件、1个LICENSE文件和1个...

    Javascript 设计模式系统讲解与应用视频资源地址.txt

    Javascript 设计模式系统讲解与应用视频资源地址.txt

    js设计模式详解和 函数式编程PDF

    JavaScript设计模式详解与函数式编程是开发者提升代码质量和可维护性的重要工具。设计模式是对在软件设计中经常出现的问题和解决方案的一种模式化描述,而函数式编程则是一种编程范式,强调程序数据的不可变性和函数...

    学用 JavaScript 设计模式

    设计模式是可重用的用于解决软件设计中一般问题的方案。设计模式如此让人着迷,以至在任何编程语言中都有对其进行的探索。 其中一个原因是它可以让我们站...本文我们将阐述JavaScript编程语言中经典和现代的设计模式。

Global site tag (gtag.js) - Google Analytics