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 尚未实现错误解决办法
Nov 27 Javascript
基于Jquery的简单&简陋Tabs插件代码
Feb 09 Javascript
我遇到的参数传递中 双引号单引号嵌套问题
Feb 11 Javascript
jquery提交form表单简单示例分享
Mar 03 Javascript
浅析javascript中function 的 length 属性
May 27 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
Sep 26 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
Apr 14 Javascript
jQuery简单实现列表隐藏和显示效果示例
Sep 12 Javascript
EditPlus中的正则表达式 实战(2)
Dec 15 Javascript
详解AngularJS controller调用factory
May 19 Javascript
javascript中call()、apply()的区别
Mar 21 Javascript
微信小程序登录数据解密及状态维持实例详解
May 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
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
js数字输入框(包括最大值最小值限制和四舍五入)
2009/11/24 Javascript
基于jquery的无缝循环新闻列表插件
2011/03/07 Javascript
玩转方法:call和apply
2014/05/08 Javascript
浅谈angular.js中实现双向绑定的方法$watch $digest $apply
2015/10/14 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
vue项目中用cdn优化的方法
2018/01/03 Javascript
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
微信小程序onLaunch异步,首页onLoad先执行?
2018/09/20 Javascript
js中Array对象的常用遍历方法详解
2019/01/17 Javascript
iview tabs 顶部导航栏和模块切换栏的示例代码
2019/03/04 Javascript
vue移动端屏幕适配详解
2019/04/30 Javascript
vue实现带复选框的树形菜单
2019/05/27 Javascript
浅谈TypeScript 用 Webpack/ts-node 运行的配置记录
2019/10/11 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
Python pass 语句使用示例
2014/03/11 Python
Python的Tornado框架异步编程入门实例
2015/04/24 Python
Python中用于计算对数的log()方法
2015/05/15 Python
python使用magic模块进行文件类型识别方法
2018/12/08 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
Pycharm 2020.1 版配置优化的详细教程
2020/08/07 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
Python中的None与 NULL(即空字符)的区别详解
2020/09/24 Python
python 元组和列表的区别
2020/12/30 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
蔻驰英国官网:COACH英国
2020/07/19 全球购物
工商管理应届生求职信
2013/10/07 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
银行进社区活动总结
2014/07/07 职场文书
食品质量与安全专业毕业生求职信
2014/08/11 职场文书
尊老爱亲美德少年事迹材料
2014/08/14 职场文书
微软团队与 NASA 科学家和惠普企业(HPE)的工程师合作
2022/04/21 数码科技