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 相关文章推荐
常用js脚本
Dec 03 Javascript
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
Nov 30 Javascript
用JS实现一个页面多个css样式实现
May 29 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
Jan 06 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
Jun 23 Javascript
原生JS实现左右箭头选择日期实例代码
Mar 14 Javascript
angular学习之动态创建表单的方法
Dec 07 Javascript
Vue实现简单分页器
Dec 29 Javascript
微信小程序时间标签和时间范围的联动效果
Feb 15 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
Jun 10 Javascript
angula中使用iframe点击后不执行变更检测的问题
May 10 Javascript
解决VueCil代理本地proxytable无效报错404的问题
Nov 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编程注意事项的小结
2013/04/27 PHP
php无法连接mysql数据库的正确解决方法
2016/07/01 PHP
jquery表单验证使用插件formValidator
2012/11/10 Javascript
使用jQuery实现更改默认alert框体
2015/04/13 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
JS中用childNodes获取子元素换行会产生一个子元素
2016/12/08 Javascript
Vue2递归组件实现树形菜单
2017/04/10 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
React styled-components设置组件属性的方法
2018/08/07 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
详解Vue2.0组件的继承与扩展
2018/11/23 Javascript
JS数组扁平化(flat)方法总结详解
2019/06/24 Javascript
jQuery实现图片下载代码
2019/07/18 jQuery
js实现文字头像的生成代码
2020/03/07 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
python文件和目录操作方法大全(含实例)
2014/03/12 Python
Python实现Const详解
2015/01/27 Python
python文件操作的简单方法总结
2019/11/07 Python
浅谈python之自动化运维(Paramiko)
2020/01/31 Python
python 伯努利分布详解
2020/02/25 Python
python实点云分割k-means(sklearn)详解
2020/05/28 Python
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
阿迪达斯比利时官方商城:adidas比利时
2016/10/10 全球购物
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
美国在线购买空气净化器、除湿器、加湿器网站:AllergyBuyersClub
2021/03/16 全球购物
大学生的自我鉴定范文
2014/01/21 职场文书
入党积极分子评语
2014/05/04 职场文书
活动总结书
2014/05/08 职场文书
竞选学委演讲稿
2014/09/13 职场文书
出国签证在职证明范本
2014/11/24 职场文书
中学生自我评价2015
2015/03/03 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
合同审查法律意见书
2015/06/04 职场文书
详解JAVA的控制语句
2021/11/11 Java/Android