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 flash下fromCharCode和charCodeAt方法使用说明
Jan 12 Javascript
js 提交和设置表单的值
Dec 19 Javascript
javascript 简练的几个函数
Aug 29 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
Sep 16 Javascript
Jquery easyui 下loaing效果示例代码
Aug 12 Javascript
javascript页面上使用动态时间具体实现
Mar 18 Javascript
node.js实现端口转发
Apr 14 Javascript
浅析Javascript中bind()方法的使用与实现
May 30 Javascript
浅谈js中调用函数时加不加括号的问题
Jul 28 Javascript
js+html获取系统当前时间
Nov 10 Javascript
jQuery使用each遍历循环的方法
Sep 19 jQuery
vue微信分享出来的链接点开是首页问题的解决方法
Nov 28 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+Ajax实现唯一校验实现代码[简单应用]
2011/11/29 PHP
php中用socket模拟http中post或者get提交数据的示例代码
2013/08/08 PHP
php实现基于openssl的加密解密方法
2016/09/30 PHP
浅谈PHP进程管理
2019/03/08 PHP
jquery监控数据是否变化(修正版)
2011/04/12 Javascript
删除节点的jquery代码
2014/01/13 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
jQuery 重复加载错误以及修复方法
2014/12/16 Javascript
jQuery中has()方法用法实例
2015/01/06 Javascript
浅谈JavaScript中Date(日期对象),Math对象
2015/02/05 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
JavaScript中数组的各种操作的总结(必看篇)
2017/02/13 Javascript
JavaScript获取用户所在城市及地理位置
2018/04/21 Javascript
原生JS实现的碰撞检测功能示例
2018/05/18 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
javascript利用canvas实现鼠标拖拽功能
2020/07/23 Javascript
在Python的web框架中中编写日志列表的教程
2015/04/30 Python
Python探索之修改Python搜索路径
2017/10/25 Python
对numpy中数组元素的统一赋值实例
2018/04/04 Python
Django如何配置mysql数据库
2018/05/04 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
Pandas 数据处理,数据清洗详解
2018/07/10 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
如何用python爬取微博热搜数据并保存
2021/02/20 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
Maisons du Monde德国:法国家具和装饰的市场领导者
2019/07/26 全球购物
建筑实习自我鉴定
2013/10/18 职场文书
大专应届生个人的自我评价
2013/11/21 职场文书
人力资源专员岗位职责
2014/01/30 职场文书
汇源肾宝广告词
2014/03/20 职场文书
2014年医务科工作总结
2014/12/18 职场文书
毕业论文致谢范文
2015/05/14 职场文书
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL
Docker官方工具docker-registry案例演示
2022/04/13 Servers