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 相关文章推荐
jQuery 前的按键判断代码
Mar 19 Javascript
jquery判断checkbox(复选框)是否被选中的代码
Oct 20 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(五)可移动地图的实现
Jan 23 Javascript
浅析js封装和作用域
Jul 09 Javascript
text-align:justify实现文本两端对齐 兼容IE
Aug 19 Javascript
JS+CSS实现带小三角指引的滑动门效果
Sep 22 Javascript
深入探讨前端框架react
Dec 09 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
Jun 17 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
Nov 09 jQuery
JS co 函数库的含义和用法实例总结
Apr 08 Javascript
vue大型项目之分模块运行/打包的实现
Sep 21 Javascript
插件导致ECharts被全量引入的坑示例解析
Sep 23 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
phpmyadmin 访问被拒绝的真实原因
2009/06/15 PHP
Php-Redis安装测试笔记
2015/03/05 PHP
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
PHP中“=>
2019/03/01 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
2020/04/04 PHP
JavaScript中String和StringBuffer的速度之争
2010/04/01 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
禁用页面部分JavaScript不是全部而是部分
2014/09/03 Javascript
深入分析Javascript事件代理
2016/01/30 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
2016/06/07 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
简单封装js的dom查询实例代码
2016/07/08 Javascript
js简单时间比较的方法
2016/08/02 Javascript
jQuery post数据至ashx实例详解
2016/11/18 Javascript
深入理解选择框脚本[推荐]
2016/12/13 Javascript
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
webpack多入口多出口的实现方法
2018/08/17 Javascript
vue 监听屏幕高度的实例
2018/09/05 Javascript
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
详解Python中的Descriptor描述符类
2016/06/14 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
2019/07/09 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
巴基斯坦购物网站:Goto
2019/03/11 全球购物
德国家具折扣店:POCO
2020/02/28 全球购物
物流管理毕业生自荐信
2013/10/24 职场文书
课程设计感想范文
2015/08/11 职场文书
责任书格式
2019/04/18 职场文书
SQLServer2008提示评估期已过解决方案
2021/04/12 SQL Server
Python机器学习算法之决策树算法的实现与优缺点
2021/05/13 Python
Python OpenCV 图像平移的实现示例
2021/06/04 Python