`

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设计模式+JavaScript模式+JavaScript异步编程

    1. **JavaScript设计模式**: 设计模式是软件工程中经过实践验证的、解决常见问题的有效方法。在JavaScript中,常见的设计模式包括: - 单例模式:确保一个类只有一个实例,并提供全局访问点。 - 工厂模式:创建...

    JavaScript设计模式.pdf

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

    JavaScript 设计模式(高清扫描版本)- 张容铭

    JavaScript设计模式是由张容铭编著的一本关于JavaScript编程领域的重要参考书籍,主要探讨了如何在JavaScript编程中应用设计模式来提升代码质量和可维护性。设计模式是软件工程中的最佳实践,它们是针对常见问题的...

    javascript DOM高级程序设计 及 javascript 设计模式

    在吃透了前面所说的书之后,接下来两本书的顺序已经无关紧要了,《JavaScript DOM高级程序设计》(注意和《JavaScript 高级程序设计》相区别)和《JavaScript设计模式》,这两本都是重量级的书,能让你的JS技术上一...

    JavaScript 设计模式 azw3

    《JavaScript设计模式》是JavaScript设计模式的学习指南。全书分为14章。首先介绍了什么是模式、模式的结构、类别、模式的分类、如何编写模式等等;然后,集中介绍了很多流行的设计模式在JavaScript中的应用,包括...

    学用JavaScript设计模式

    书中不仅介绍了JavaScript中经典和现代的设计模式,还包括了针对不同JavaScript开发框架(如MVC、MVP、MVVM)的设计模式,以及最新的模块化JavaScript设计模式(AMD、CommonJS、ES Harmony)和jQuery中的设计模式。...

    Javascript 设计模式 电子书

    因此,通过学习JavaScript设计模式,Web开发人员能够更好地组织代码,写出更加健壮且易于维护的JavaScript应用程序。 《Javascript 设计模式》电子书深入讲解了JavaScript开发原理以及在客户端脚本开发中的设计模式...

    JAVASCRIPT设计模式[收集].pdf

    JavaScript 设计模式概述 JavaScript 设计模式是一个非常重要的概念,在前端开发中,掌握设计模式可以提高开发效率和代码质量。本文将对 JavaScript 设计模式进行总体介绍,并对闭包、封装等重要概念进行详细讲解。...

    javascript设计模式与开发实践

    本书在尊重《设计模式》原意的同时,针对JavaScript语言特性全面介绍了更适合JavaScript程序员的了16个常用的设计模式,讲解了JavaScript面向对象和函数式编程方面的基础知识,介绍了面向对象的设计原则及其在设计...

    Javascript设计模式源码

    《JavaScript设计模式》中,Google和Yahoo公司的两位资深Web专家对此给出了掷地有声的肯定回答。作者针对常见的开发任务,从YUI等实战代码中取材,提供了专家级的解决方案,不仅透彻剖析了JavaScript扣的面向对象...

    常用的Javascript设计模式.pdf

    ### 常用的Javascript设计模式 #### 一、单例模式详解 单例模式是一种常用的软件设计模式,它的核心思想在于确保一个类只有一个实例,并提供一个全局访问点。这种模式在JavaScript这样的“无类”语言中尤为重要。...

    精通javascript设计模式en版pdf

    **JavaScript设计模式:深入理解与应用** 在编程领域,设计模式是解决常见问题的经验总结,它们代表了软件设计的最佳实践。对于JavaScript这种广泛应用于Web开发的动态语言来说,设计模式同样至关重要。《精通...

    JavaScript设计模式Demo

    JavaScript设计模式是编程实践中的一种重要概念,它是为了在JavaScript环境中编写更加高效、可维护和可扩展的代码而形成的一套通用解决方案。这个"JavaScript设计模式Demo"可能包含了各种常见的设计模式示例,如单例...

    外文翻译:学用JavaScript设计模式

    ### 外文翻译:学用JavaScript设计模式 #### 序言与重要性 设计模式作为软件工程中的一个重要组成部分,其核心在于提供了一套标准的方法论,帮助开发人员以优雅、高效的方式解决常见的软件设计问题。《学用...

    Javascript 设计模式 很经典 第一本

    ### JavaScript设计模式经典知识点概述 #### 一、书籍简介与背景 《Pro JavaScript Design Patterns》是一本关于JavaScript设计模式的经典著作,由Ross Harmes和Dustin Diaz共同编写,并于2008年出版。该书深入浅出...

    javascript 设计模式

    JavaScript设计模式是编程实践中一种重要的思想,它通过总结和提炼出一套可复用的解决方案,帮助开发者解决在软件开发过程中遇到的常见问题。设计模式并不是特定的语言特性,而是跨越多种编程语言的一般性原则和最佳...

    学用 JavaScript 设计模式.pdf

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

Global site tag (gtag.js) - Google Analytics