zoukankan      html  css  js  c++  java
  • JS常用的设计模式(2)——简单工厂模式

    简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况。 说的通俗点,就像公司茶水间的饮料机,要咖啡还是牛奶取决于你按哪个按钮。

    简单工厂模式在创建ajax对象的时候也非常有用.

    这个库里提供了几种ajax请求的方式,包括xhr对象的get, post, 也包括跨域用的jsonp和iframe. 为了方便使用, 这几种方式都抽象到了同一个接口里面.

    1 var request1 = Request('cgi.xx.com/xxx' , ''get' ); 
    2 request1.start(); 
    3 request1.done( fn ); 
    4 var request2 = Request('cgi.xx.com/xxx' , ''jsonp' ); 
    5 request2.start(); 
    6 request2.done( fn ); 

    Request实际上就是一个工厂方法, 至于到底是产生xhr的实例, 还是jsonp的实例. 是由后来的代码决定的。

    实际上在js里面,所谓的构造函数也是一个简单工厂。只是批了一件new的衣服. 我们扒掉这件衣服看看里面。

    通过这段代码, 在firefox, chrome等浏览器里,可以完美模拟new.

     1  function A( name ){ 
     2               this.name = name; 
     3        } 
     4        function ObjectFactory(){ 
     5               var obj = {}, 
     6                      Constructor = Array.prototype.shift.call( arguments ); 
     7 obj.__proto__ =  typeof Constructor .prototype === 'number'  ? Object.prototype 
     8 :  Constructor .prototype;  
     9               var ret = Constructor.apply( obj, arguments ); 
    10               return typeof ret === 'object' ? ret : obj; 
    11        } 
    12        var a = ObjectFactory( A, 'svenzeng' ); 
    13        alert ( a.name );  //svenzeng 

    这段代码来自es5的new和构造器的相关说明, 可以看到,所谓的new, 本身只是一个对象的复制和改写过程, 而具体会生成什么是由调用ObjectFactory时传进去的参数所决定的。

  • 相关阅读:
    FPGA实现USB2.0同步读数据传输且用chipscop抓取波形(3)
    FPGA实现对USB2.0的同步数据传输及USB2.0固件配置(2)
    通过MATLAB实现图像数据转换成.bin格式在USB2.0上传输(1)
    【转】ssh免密码登录的原理
    【转】ssh登录原理以及ssh免密码登陆
    Windows与VMware中的CentOS系统互通访问
    第十一章 条件逻辑
    第十章 再谈连接
    第九章 子查询
    第八章 分组和聚集
  • 原文地址:https://www.cnblogs.com/jymz/p/4250535.html
Copyright © 2011-2022 走看看