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 目录列举函数
Nov 06 Javascript
JavaScript使用技巧精萃[代码非常实用]
Nov 21 Javascript
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
Mar 23 Javascript
jquery 仿QQ校友的DIV模拟窗口效果源码
Mar 24 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
Sep 03 Javascript
jquery插件如何使用 jQuery操作Cookie插件使用介绍
Dec 15 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
Nov 19 Javascript
seajs模块之间依赖的加载以及模块的执行
Oct 21 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
Feb 15 Javascript
微信小程序 五星评价功能的实现
Mar 09 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
Mar 28 jQuery
vue自定义标签和单页面多路由的实现代码
May 03 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中几种常见安全设置详解
2010/04/06 PHP
解析PHP中的unset究竟会不会释放内存
2013/07/18 PHP
CI框架Session.php源码分析
2014/11/03 PHP
php将日期格式转换成xx天前的格式
2015/04/16 PHP
PHP时间和日期函数详解
2015/05/08 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
php实现Session存储到Redis
2015/11/11 PHP
利用php-cli和任务计划实现刷新token功能的方法
2017/05/03 PHP
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
jquery实现保存已选用户
2014/07/21 Javascript
对JavaScript客户端应用编程的一些建议
2015/06/24 Javascript
json与jsonp知识小结(推荐)
2016/08/16 Javascript
PHP获取当前页面完整URL的方法
2016/12/02 Javascript
老生常谈js数据类型
2017/08/03 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
vue实现菜单切换功能
2019/05/08 Javascript
基于vue-cli3和element实现登陆页面
2019/11/13 Javascript
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
pycharm修改file type方式
2019/11/19 Python
Python sys模块常用方法解析
2020/02/20 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
5款实用的python 工具推荐
2020/10/13 Python
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
来自世界各地的饮料:Flavourly
2019/05/06 全球购物
ProForm英国站点:健身房和健身器材网上商店
2019/06/05 全球购物
快餐公司创业计划书
2014/04/29 职场文书
理财学专业自荐书
2014/06/28 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
2015年元旦晚会活动总结(学生会)
2014/11/28 职场文书
2016年优秀少先队员事迹材料
2016/02/26 职场文书
七年级语文教学反思
2016/03/03 职场文书
2016年校园社会综合治理宣传月活动总结
2016/03/16 职场文书
导游词之无锡唐城
2019/12/12 职场文书