JavaScript中实现工厂模式.

JavaScript中实现工厂模式.


        第一次亲密接触:利用JavaScript中的prototype实现"基于多态的工厂模式".

 

        老早就知道JavaScript中的prototype了,可一直没机会正式用下,虽说以前自己写着玩过,但由于没有与实际应用联系起来也就没能真真正正地感受到这个prototype的威力.

 

        今天在工作中终于有幸用到这个了.

 

        具体情况是这样的:项目中要提交一个表单,可这个表单有多层结构,用户在提交时可以具体情况而有选择性的提交.刚开始时,是用那种很笨很笨地纯粹表单提交,结果在Java那边要写一大串的代码来从request里取出各个Parameter再用这个生成JavaBean实例(想过用Spring的form标签,但配置起来很是复杂,终因得不偿失而放弃了).

 

        决定用JSON来包装并用jQuery里的Post来Ajax地与后台交互.

 

        刚开始时,用如下的代码来做JSON的包装:


 var menu;
 if(conditionOne){
  menu = {name: $('nameColumn'), order: $('ordrColumn'), ...subCategory:{...,...}};
  $.post('xxxx.htm',{para: JSON.stringfy(menu)}, success:function(){....});
 }else if(conditionTwo){
  menu = {name: $('nameColumn'), order: $('ordrColumn'), ...imageInfo:{...,...}};
  $.post('xxxx.htm',{para: JSON.stringfy(menu)}, success:function(){....});
 }
这样做很烦琐,写的代码也很不友好,很不面向对象.

 

        经高手点拔后,采用了下面的方法.


 step1:在一个单独的js文件中如下所示地写出menu类:
 function Menu(name,order,...,condition...,option){
  this.name = name;
  this.order = order;
  ...
  this.condition = condtion;
  ...
  this.option = option;
 }

 

 Menu.prototype.toJsonString = function(){
  var data;
  if(this.conditionOne){
   var subCategory = createSubCategory();
   data = {name:nameVal,order:orderVal,...,subCategoryString:subCategory};
  }else if(this.conditionTwo){
   var imageInfo = createImageInfo();
   data = {name:nameVal,order:orderVal,...,imageInfoString:imageInfo};
  }
  return JSON.stringfy(data);
 }

 

 function createMenu(){
  if(conditionOne){
   returne new Menu(.......);
  }else if(conditionTwo){
   returne new Menu(.......);
  }
 }


 step2,这样有了上面的准备后,就可以直接在响应事件中写:

 function eventHandler(){
  var menu = createMenu();

  $.post('xxxx.htm',{para: menu.toJsonString()}, success:function(){....});
 }

 

 

 从调用方的角度来看,代码简洁了许多.

 


 利用这个prototype还实现了JavaScript版的工厂模式,呵呵,不错!
 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值