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 相关文章推荐
javascript检查日期格式的函数[比较全]
Oct 17 Javascript
深入理解JavaScript系列(6) 强大的原型和原型链
Jan 15 Javascript
JavaScript 代码压缩工具小结
Feb 27 Javascript
基于jquery插件制作左右按钮与标题文字图片切换效果
Nov 07 Javascript
jquery ajax应用中iframe自适应高度问题解决方法
Apr 12 Javascript
jquery使用ajax实现微信自动回复插件
Apr 28 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
Jan 21 Javascript
ES5学习教程之Array对象
Apr 01 Javascript
vue中axios的封装问题(简易版拦截,get,post)
Jun 15 Javascript
jQuery操作事件完整实例分析
Jan 10 jQuery
JavaScript缺少insertAfter解决方案
Jul 03 Javascript
谈谈JavaScript中的函数
Sep 08 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
农民和部队如何穿矿
2020/03/04 星际争霸
使用dump函数,给php加断点测试
2013/06/25 PHP
PHP中使用虚代理实现延迟加载技术
2014/11/05 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
2015/01/04 PHP
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
react中的ajax封装实例详解
2017/10/17 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
微信小程序实现自定义加载图标功能
2018/07/19 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
2019/10/31 Javascript
jQuery三组基本动画与自定义动画操作实例总结
2020/05/09 jQuery
JavaScript实现拖动对话框效果的实现代码
2020/10/12 Javascript
VUE项目实现主题切换的多种方法
2020/11/26 Vue.js
[01:14]DOTA2亚洲邀请赛小组赛赛前花絮
2017/03/27 DOTA
[02:22]2018DOTA2亚洲邀请赛VG赛前采访
2018/04/03 DOTA
浅析Python中的for 循环
2016/06/09 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
基于pip install django失败时的解决方法
2018/06/12 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
python 实现dict转json并保存文件
2019/12/05 Python
python实现高斯判别分析算法的例子
2019/12/09 Python
什么是Python包的循环导入
2020/09/08 Python
教你如何用python操作摄像头以及对视频流的处理
2020/10/12 Python
Traffic People官网:女式花裙、上衣和连身裤
2020/10/12 全球购物
最新个人职业生涯规划书
2014/01/22 职场文书
2015年试用期自我评价范文
2015/03/10 职场文书
2016教师节问候语
2015/11/10 职场文书
《风不能把阳光打败》读后感3篇
2020/01/06 职场文书
JavaScript的Set数据结构详解
2022/02/18 Javascript
SpringBoot集成MongoDB实现文件上传的步骤
2022/04/18 MongoDB