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 相关文章推荐
pjblog修改技巧汇总
Mar 12 Javascript
JQuery 学习笔记 选择器之四
Jul 23 Javascript
基于jquery的cookie的用法
Jan 10 Javascript
判断javascript的数据类型(示例代码)
Dec 11 Javascript
javascript中bind函数的作用实例介绍
Sep 28 Javascript
在JavaScript中处理字符串之link()方法的使用
Jun 08 Javascript
七夕情人节丘比特射箭小游戏
Aug 20 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
Oct 13 Javascript
JS中type="button"和type="submit"的区别
Jul 04 Javascript
jquery应用实例分享_实现手风琴特效
Feb 01 jQuery
javascript异步编程的六种方式总结
May 17 Javascript
weui中的picker使用js进行动态绑定数据问题
Nov 06 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/02 国漫
晶体管单管来复再生式收音机
2021/03/02 无线电
PHP中Header使用的HTTP协议及常用方法小结
2014/11/04 PHP
PHP制作百度词典查词采集器
2015/01/29 PHP
PHPUnit + Laravel单元测试常用技能
2019/11/06 PHP
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
2013/04/09 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
关于JavaScript的变量的数据类型的判断方法
2015/08/14 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
在SSM框架下用laypage和ajax实现分页和数据交互的方法
2019/09/27 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
[39:08]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第一场 12.12
2020/12/16 DOTA
Python中使用urllib2模块编写爬虫的简单上手示例
2016/01/20 Python
使用python生成目录树
2018/03/29 Python
查看jupyter notebook每个单元格运行时间实例
2020/04/22 Python
基于matplotlib中ion()和ioff()的使用详解
2020/06/16 Python
python super()函数的基本使用
2020/09/10 Python
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
沪江旗下的海量优质课程平台:沪江网校
2017/11/07 全球购物
德国网上宠物店:Zoobio
2018/05/23 全球购物
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
别名指示符是什么
2012/10/08 面试题
交通法规咨询中心工作职责
2013/11/27 职场文书
校本教研活动总结
2014/07/01 职场文书
中国文明网向国旗敬礼寄语大全
2014/09/27 职场文书
幼儿教师师德师风自我评价
2015/03/05 职场文书
浪漫婚礼主持词开场白
2015/11/24 职场文书
幼儿园大班教师评语
2019/06/21 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript
MySQL的Query Cache图文详解
2021/07/01 MySQL