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 相关文章推荐
读jQuery之十三 添加事件和删除事件的核心方法
Aug 23 Javascript
jquery乱码与contentType属性设置问题解决方案
Jan 07 Javascript
简单几行JS Code实现IE邮件转发新浪微博
Jul 03 Javascript
使用js画图之正弦曲线
Jan 12 Javascript
JSON相关知识汇总
Jul 03 Javascript
jquery validation验证表单插件
Jan 07 Javascript
移动端使用localResizeIMG4压缩图片
Apr 22 Javascript
VUE前端cookie简单操作
Oct 17 Javascript
基于webpack-hot-middleware热加载相关错误的解决方法
Feb 22 Javascript
JS使用cookie保存用户登录信息操作示例
May 30 Javascript
vue-cli配置全局sass、less变量的方法
Jun 06 Javascript
Openlayers测量距离与面积的实现方法
Sep 25 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 获取全局变量的代码
2011/04/21 PHP
利用PHP扩展vld查看PHP opcode操作步骤
2013/03/04 PHP
mcrypt启用 加密以及解密过程详细解析
2013/08/07 PHP
Yii操作数据库的3种方法
2014/03/11 PHP
Discuz7.2版的faq.php SQL注入漏洞分析
2014/08/06 PHP
PHP里8个鲜为人知的安全函数分析
2014/12/09 PHP
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
2012/07/03 Javascript
分享JavaScript获取网页关闭与取消关闭的事件
2013/12/13 Javascript
jQuery实现购物车多物品数量的加减+总价计算
2014/06/06 Javascript
基于NodeJS的前后端分离的思考与实践(三)轻量级的接口配置建模框架
2014/09/26 NodeJs
原生JS实现旋转木马式图片轮播插件
2016/04/25 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
深入理解JavaScript中的并行处理
2016/09/22 Javascript
详解js界面跳转与值传递
2016/11/22 Javascript
移动端脚本框架Hammer.js
2016/12/15 Javascript
js实现的在线调色板功能完整实例
2016/12/21 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
vue + element-ui实现简洁的导入导出功能
2017/12/22 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
2018/02/01 Javascript
JavaScript读写二进制数据的方法详解
2018/09/09 Javascript
javascript Canvas动态粒子连线
2020/01/01 Javascript
探究Python多进程编程下线程之间变量的共享问题
2015/05/05 Python
Python中的下划线详解
2015/06/24 Python
Python Socket编程之多线程聊天室
2018/07/28 Python
OpenCV 模板匹配
2019/07/10 Python
利用rest framework搭建Django API过程解析
2019/08/31 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
Python动态强类型解释型语言原理解析
2020/03/25 Python
python excel多行合并的方法
2020/12/09 Python
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
美国最古老的精致书写工具制造商:A.T. Cross(高仕)
2018/01/30 全球购物
房屋公证委托书
2014/04/03 职场文书
幼儿评语大全
2014/04/30 职场文书
2016年社区中秋节活动总结
2016/04/05 职场文书