javascript 模式设计之工厂模式学习心得


Posted in Javascript onApril 27, 2010

模式类型:工厂模式

模式说明:常用模式之一,用来动态创建对象

适用范围:在运行期间需要在一系列可互换的子类中进行选择的类

注意事项:接口的实现,从而使不同子类可以被同等的对待,恰当的使用工厂模式,但不要拘泥与形式,理解本质。

关键点:以 函数/类/子类 构建的选择器

本质:函数作为选择器的使用

一般使用形式:

作为独立的选择器存在:

function FactoryMode(index){ 
switch(index){ 
case "index1" : 
return new Class1();break; 
case "index2": 
return new Class2();break; 
case "index3": 
return new Class3();break; 
default:return new ClassComm();break; 
} 
}

或作为类的一个方法存在:
var MainClass=function(){};//主类构造器 
MainClass.prototype={ 
FactoryMode:function(){}//子类选择器 
}

又或隐式选择,即不以使用者的主观选择而选择:
var xmlRequest=function(){ 
if(this.isOffOnline()){ 
xhr= new OfflineHandler(); 
}//如果此时网络不可用,创建可缓存AJAX对象 
else if(this.isHightLatency()){ 
xhr= new QueuedHandler(); 
}//如果网络延迟较大,创建队列形式AJAX对象 
else { 
xhr=new SimpleHandler(); 
}//如果网络正常,创建简单AJAX对象 
interface.ensureImplements(xhr,AjaxHandler); 
//检查对象是否实现了接口,从而确保以后的工作可以顺利进行 
return xhr; 
}

延伸:

工厂模式的本质就是选择器的应用,选择器不仅可作为对象的选择,还可作为函数的选择,类的选择,参数的选择

函数的选择,如:

var addEvent=(function(){ 
if(!-[0,]){ 
return function(elem,type,handler){ 
elem[type+handler.toString()]=handler; 
elem.attachEvent("on"+type,elem[type+handler.toString]); 
}}//if IE 
else { 
return function(elem,type,handler){ 
elem.addEventListener(type,handler,false); 
} 
} 
})();//避免多次判断

类的选择:
var suitableClass=function(){ 
if(match condition A) return Class1; 
else if(match condition B) return Class2; 
else return ClassComm; 
}

参数的选择:
function Country(country){ 
if(country=="China") 
this.config={};//设置基本参数1 
else if(contry=="America") 
this.config={};//设置参数2 
else if() 
.......//等等 
} 
Country.prototype={};
Javascript 相关文章推荐
延时重复执行函数 lLoopRun.js
May 08 Javascript
JavaScript中出现乱码的处理心得
Dec 24 Javascript
jquery each()源代码
Feb 14 Javascript
jquery获取当前点击对象的value方法
Feb 28 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
Dec 25 Javascript
AngularJS转换响应内容
Jan 27 Javascript
基于Javascript实现文件实时加载进度的方法
Oct 12 Javascript
关于js中的鼠标事件总结
Jul 11 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
Oct 12 Javascript
使用JS判断页面是首次被加载还是刷新
May 26 Javascript
基于PHP pthreads实现多线程代码实例
Jun 24 Javascript
OpenLayer3自定义测量控件MeasureTool
Sep 28 Javascript
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
Apr 27 #Javascript
jQuery Lightbox 图片展示插件使用说明
Apr 25 #Javascript
jQuery 表格工具集
Apr 25 #Javascript
基于JQuery.timer插件实现一个计时器
Apr 25 #Javascript
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
Apr 25 #Javascript
一个简单的jQuery插件制作 学习过程及实例
Apr 25 #Javascript
Javascript中的相等与不等运算
Apr 25 #Javascript
You might like
ThinkPHP之foreach标签使用概述
2014/06/30 PHP
PHP中数据库单例模式的实现代码分享
2014/08/21 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
php面向对象程序设计入门教程
2019/06/22 PHP
Iframe thickbox2.0使用的方法
2009/03/05 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
mailto的使用技巧分享
2012/12/21 Javascript
js实现幻灯片播放图片示例代码
2013/11/07 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
浅谈JS运算符&&和|| 及其优先级
2016/08/10 Javascript
javascript鼠标跟随运动3种效果(眼球效果,苹果菜单,方向跟随)
2016/10/27 Javascript
简单好用的nodejs 爬虫框架分享
2017/03/26 NodeJs
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
Vue一个案例引发的递归组件的使用详解
2018/11/15 Javascript
Python中给List添加元素的4种方法分享
2014/11/28 Python
Python使用PDFMiner解析PDF代码实例
2017/03/27 Python
python使用KNN算法手写体识别
2018/02/01 Python
python如何实现代码检查
2019/06/28 Python
Python寻找路径和查找文件路径的示例
2019/07/10 Python
python3.6连接mysql数据库及增删改查操作详解
2020/02/10 Python
使用Nibabel库对nii格式图像的读写操作
2020/07/01 Python
中邮全球便购:中国邮政速递物流
2017/03/04 全球购物
匡威俄罗斯官网:Converse俄罗斯
2020/05/09 全球购物
化工机械应届生求职信
2013/11/04 职场文书
开办饭店创业计划书
2013/12/28 职场文书
给老师的检讨书
2014/02/11 职场文书
大学生党员承诺书
2014/05/20 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
嘉宾邀请函
2015/01/31 职场文书
2015年世界无烟日活动方案
2015/05/04 职场文书
盗窃案辩护词
2015/05/21 职场文书
贷款收入证明范本
2015/06/12 职场文书
行政处罚告知书
2015/07/01 职场文书
ES6 解构赋值的原理及运用
2021/05/25 Javascript
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript