javascript 模式设计之工厂模式学习心得


Posted in Javascript onApril 27, 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级联下拉菜单以及AJAX数据验证核心代码
May 10 Javascript
没有document.getElementByName方法
Aug 19 Javascript
如何设置iframe高度自适应在跨域情况下的可用方法
Sep 06 Javascript
第六章之辅组类与响应式工具
Apr 25 Javascript
js+html5实现canvas绘制网页时钟的方法
May 21 Javascript
Vue.js每天必学之组件与组件间的通信
Sep 08 Javascript
使用JavaScript获取Request中参数的值方法
Sep 27 Javascript
教大家轻松制作Bootstrap漂亮表格(table)
Dec 13 Javascript
微信小程序 扎金花简单实例
Feb 21 Javascript
Bootstrap Multiselect 常用组件实现代码
Jul 09 Javascript
vue实现导航栏效果(选中状态刷新不消失)
Dec 13 Javascript
5 种JavaScript编码规范
Jan 30 Javascript
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
Apr 27 #Javascript
jQuery Lightbox 图片展示插件使用说明
Apr 25 #Javascript
jQuery 表格工具集
Apr 25 #Javascript
基于JQuery.timer插件实现一个计时器
Apr 25 #Javascript
jquery+ashx无刷新GridView数据显示插件(实现分页、排序、过滤功能)
Apr 25 #Javascript
一个简单的jQuery插件制作 学习过程及实例
Apr 25 #Javascript
Javascript中的相等与不等运算
Apr 25 #Javascript
You might like
新手学习PHP的一些基础知识分享
2011/07/27 PHP
比较简单实用的PHP无限分类源码分享(思路不错)
2011/10/13 PHP
PHP读取文件内容后清空文件示例代码
2014/03/18 PHP
PHP安全的URL字符串base64编码和解码
2014/06/19 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
2016/07/28 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
PHP异步进程助手async-helper
2018/02/05 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
2019/11/24 PHP
php中数组最简单的使用方法
2020/12/27 PHP
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
左右悬浮可分组的网站QQ在线客服代码(可谓经典)
2012/12/21 Javascript
获取元素距离浏览器周边的位置的方法getBoundingClientRect
2013/04/17 Javascript
jquery获取tr并更改tr内容示例代码
2014/02/13 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
Express作者TJ告别Node.js奔向Go
2014/07/14 Javascript
写给小白的JavaScript引擎指南
2015/12/04 Javascript
JS实现简单的tab切换选项卡效果
2016/09/21 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
JavaScript实现单英文金山打字通
2020/07/24 Javascript
vue路由拦截器和请求拦截器知识点总结
2019/11/08 Javascript
vue项目启动出现cannot GET /服务错误的解决方法
2020/04/26 Javascript
通过实例了解Nodejs模块系统及require机制
2020/07/16 NodeJs
JavaScript 声明私有变量的两种方式
2021/02/05 Javascript
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
对python中大文件的导入与导出方法详解
2018/12/28 Python
纯HTML5+CSS3制作生日蛋糕(代码易懂)
2016/11/16 HTML / CSS
汽车队司机先进事迹材料
2014/02/01 职场文书
工程采购员岗位职责
2014/03/09 职场文书
志愿者爱心公益活动策划方案
2014/09/15 职场文书
个人对照检查剖析材料
2014/10/13 职场文书
2015年国庆节寄语
2015/08/17 职场文书
高中信息技术教学反思
2016/02/16 职场文书