javascript 模式设计之工厂模式详细说明


Posted in Javascript onMay 10, 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 相关文章推荐
在网页里看flash的trace数据的js类
Jan 10 Javascript
斜45度寻路实现函数
Aug 20 Javascript
jquery实现textarea输入框限制字数的方法
Jan 15 Javascript
Javascript数据结构与算法之列表详解
Mar 12 Javascript
举例详解Python中smtplib模块处理电子邮件的使用
Jun 24 Javascript
理解javascript中try...catch...finally
Dec 25 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
Aug 23 Javascript
javascript简易画板开发
Apr 12 Javascript
vue.js实现请求数据的方法示例
Feb 07 Javascript
node文件上传功能简易实现代码
Jun 16 Javascript
ReactNative Image组件使用详解
Aug 07 Javascript
使用vue开发移动端管理后台的注意事项
Mar 07 Javascript
javascript 精粹笔记
May 09 #Javascript
javascript之通用简单的table选项卡实现(二)
May 09 #Javascript
javascript动态添加表格数据行(ASP后台数据库保存例子)
May 08 #Javascript
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
May 07 #Javascript
javascript 通用简单的table选项卡实现
May 07 #Javascript
jQuery 创建Dom元素
May 07 #Javascript
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
May 06 #Javascript
You might like
用PHP创建PDF中文文档
2006/10/09 PHP
一个简单计数器的源代码
2006/10/09 PHP
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
php array_walk() 数组函数
2011/07/12 PHP
PHP禁止个别IP访问网站
2013/10/30 PHP
php合并js请求的例子
2013/11/01 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
JavaScript中this关键字使用方法详解
2007/03/08 Javascript
js 编写规范
2010/03/03 Javascript
jQuery hover 延时器实现代码
2011/03/12 Javascript
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
简述vue中的config配置
2018/01/23 Javascript
Webpack 之 babel-loader文件预处理器详解
2018/03/23 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
Vue.js组件间通信方式总结【推荐】
2018/11/23 Javascript
vue实现选中效果
2020/10/07 Javascript
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
Python3基础之条件与循环控制实例解析
2014/08/13 Python
Python 中的 else详解
2016/04/23 Python
Python常用模块之requests模块用法分析
2019/05/15 Python
详解Pytorch显存动态分配规律探索
2020/11/17 Python
python抢购软件/插件/脚本附完整源码
2021/03/04 Python
个人找工作自荐信格式
2013/09/21 职场文书
写给学生的新学期寄语
2014/01/18 职场文书
职业生涯规划书范文
2014/03/10 职场文书
优秀学生评语大全
2014/04/25 职场文书
医院领导班子整改方案
2014/10/01 职场文书
2015年派出所民警工作总结
2015/04/24 职场文书
独生子女证明范本
2015/06/19 职场文书
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android
MySQL数据库之存储过程 procedure
2022/06/16 MySQL