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技巧--转义符"\"的妙用
Jan 09 Javascript
自动生成文章摘要的代码[JavaScript 版本]
Mar 20 Javascript
javascript 全等号运算符使用说明
May 31 Javascript
防止jQuery ajax Load使用缓存的方法小结
Feb 22 Javascript
详解JavaScript函数对象
Nov 15 Javascript
javascript数组克隆简单实现方法
Dec 16 Javascript
javascript检测flash插件是否被禁用的方法
Jan 14 Javascript
BootStrap学习系列之布局组件(下拉,按钮组[toolbar],上拉)
Jan 03 Javascript
详解webpack3如何正确引用并使用jQuery库
Aug 26 jQuery
利用javascript如何随机生成一定位数的密码
Sep 22 Javascript
详解JavaScript中操作符和表达式
Sep 12 Javascript
JavaScript回调函数callback用法解析
Jan 14 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 adodb连接带密码access数据库实例,测试成功
2008/05/14 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
2016/11/16 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
jQuery中filter(),not(),split()使用方法
2010/07/06 Javascript
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
javascript不可用的问题探究
2013/10/01 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
详解AngularJS中自定义过滤器
2015/12/28 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
2016/03/13 Javascript
node.js缺少mysql模块运行报错的解决方法
2016/11/13 Javascript
javascript ES6中箭头函数注意细节小结
2017/02/17 Javascript
Angular 4 指令快速入门教程
2017/06/07 Javascript
浅谈Angular 观察者模式理解
2018/11/01 Javascript
前端Vue项目详解--初始化及导航栏
2019/06/24 Javascript
element-ui table组件如何使用render属性的实现
2019/11/04 Javascript
vue中v-model对select的绑定操作
2020/08/31 Javascript
[07:08]2014DOTA2西雅图国际邀请赛 小组赛7月11日TOPPLAY
2014/07/11 DOTA
Python描述器descriptor详解
2015/02/03 Python
Python pickle模块用法实例分析
2015/05/27 Python
python通过加号运算符操作列表的方法
2015/07/28 Python
Python 专题三 字符串的基础知识
2017/03/19 Python
python 从文件夹抽取图片另存的方法
2018/12/04 Python
python安装pywin32clipboard的操作方法
2019/01/24 Python
在python中创建指定大小的多维数组方式
2019/11/28 Python
python基于property()函数定义属性
2020/01/22 Python
使用遗传算法求二元函数的最小值
2020/02/11 Python
Python字符串hashlib加密模块使用案例
2020/03/10 Python
Luxplus丹麦:香水和个人护理折扣
2018/04/23 全球购物
Huda Beauty官方商店:化妆和美容产品
2020/09/05 全球购物
荣耀商城:HIHONOR
2020/11/03 全球购物
医药学专业大学生职业生涯规划书论文
2014/01/21 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
埃及王子观后感
2015/06/16 职场文书
企业年会祝酒词
2015/08/11 职场文书
话题作文之生命的旋律
2019/12/17 职场文书
三星 3nm 芯片将于第二季度开始量产
2022/04/29 数码科技