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 相关文章推荐
jQuery弹出层插件简化版代码下载
Oct 16 Javascript
jquery 防止表单重复提交代码
Jan 21 Javascript
javaScript call 函数的用法说明
Apr 09 Javascript
用dtree实现树形菜单 dtree使用说明
Oct 17 Javascript
js中通过split函数分割字符串成数组小例子
Sep 21 Javascript
javascript设置金额样式转换保留两位小数示例代码
Dec 04 Javascript
jquery队列函数用法实例
Dec 16 Javascript
jquery实现聚光灯效果的方法
Feb 06 Javascript
JavaScript DOM节点操作方法总结
Aug 23 Javascript
基于原生js淡入淡出函数封装(兼容IE)
Oct 20 Javascript
JS实现的适合做faq或menu滑动效果示例
Nov 17 Javascript
解决ant-design-vue中menu菜单无法默认展开的问题
Oct 31 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
Adodb的十个实例(清晰版)
2006/12/31 PHP
比较好用的PHP防注入漏洞过滤函数代码
2012/04/11 PHP
php探针使用原理和技巧讲解
2019/09/17 PHP
php数组和链表的区别总结
2019/09/20 PHP
Google Suggest ;-) 基于js的动态下拉菜单
2006/10/11 Javascript
Javascript面向对象编程(三) 非构造函数的继承
2011/08/28 Javascript
xml转json的js代码
2012/08/28 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
jQuery中:file选择器用法实例
2015/01/04 Javascript
JavaScript实现梯形乘法表的方法
2015/04/25 Javascript
javascirpt实现2个iframe之间传值的方法
2016/06/30 Javascript
JavaScript数组操作函数汇总
2016/08/05 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
vue复合组件实现注册表单功能
2017/11/06 Javascript
layer.open 按钮的点击事件关闭方法
2018/08/17 Javascript
使用jQuery给Table动态增加行、清空table的方法
2018/09/05 jQuery
Element-ui el-tree新增和删除节点后如何刷新tree的实例
2020/08/31 Javascript
从零开始用webpack构建一个vue3.0项目工程的实现
2020/09/24 Javascript
pymssql数据库操作MSSQL2005实例分析
2015/05/25 Python
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
使用darknet框架的imagenet数据分类预训练操作
2020/07/07 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
python switch 实现多分支选择功能
2020/12/21 Python
HTML5 Canvas锯齿图代码实例
2014/04/10 HTML / CSS
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
J2EE系统只能是基于web
2015/09/08 面试题
大学活动邀请函
2014/01/28 职场文书
小学生勤俭节约演讲稿
2014/08/28 职场文书
群众路线教育实践活动的心得体会
2014/09/03 职场文书
北京导游词
2015/02/12 职场文书
2015年安全生产月活动总结
2015/03/26 职场文书
音乐课《小猫钓鱼》教学反思
2016/02/18 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python
Spring Boot优化后启动速度快到飞起技巧示例
2022/07/23 Java/Android