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 相关文章推荐
js的event详解。
Sep 06 Javascript
jQuery 属性选择器element[herf*='value']使用示例
Oct 20 Javascript
Extjs grid panel自带滚动条失效的解决方法
Sep 11 Javascript
浅谈jquery中next与siblings的区别
Oct 27 Javascript
微信小程序实现实时圆形进度条的方法示例
Feb 24 Javascript
jQuery实现的手风琴侧边菜单效果
Mar 29 jQuery
深入理解JavaScript 参数按值传递
May 24 Javascript
vue中使用refs定位dom出现undefined的解决方法
Dec 21 Javascript
jquery引入外部CDN 加载失败则引入本地jq库
May 23 jQuery
解决js相同的正则多次调用test()返回的值却不同的问题
Oct 10 Javascript
JS中数据结构之栈
Jan 01 Javascript
JS实现贪吃蛇游戏
Nov 15 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/08/08 PHP
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
PHP设计模式之适配器模式代码实例
2015/05/11 PHP
PHP+JS实现大规模数据提交的方法
2015/07/02 PHP
浅谈PHP值mysql操作类
2016/06/29 PHP
javascript JSON操作入门实例
2010/04/16 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
jQuery 获取浏览器所在的IP地址的小例子
2013/11/08 Javascript
JavaScript框架(iframe)操作总结
2014/04/16 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
2015/08/25 Javascript
jQuery实现自动调用和触发某个事件的方法
2016/11/18 Javascript
详细讲解vue2+vuex+axios
2017/05/27 Javascript
vue脚手架vue-cli的学习使用教程
2017/06/06 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
vue动态配置模板 'component is'代码
2019/07/04 Javascript
JS实现压缩上传图片base64长度功能
2019/12/03 Javascript
详解JavaScript 高阶函数
2020/09/14 Javascript
[01:51]历届DOTA2国际邀请赛举办地回顾 TI9落地上海
2018/08/26 DOTA
Django1.7+python 2.78+pycharm配置mysql数据库教程
2014/11/18 Python
在Python中关于中文编码问题的处理建议
2015/04/08 Python
在Django中创建第一个静态视图
2015/07/15 Python
Python实现八大排序算法
2016/08/13 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
2017/06/16 Python
Python面向对象编程基础解析(二)
2017/10/26 Python
使用matplotlib画散点图的方法
2018/05/25 Python
python实现电子词典
2020/03/03 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
星空联盟C# .net笔试题
2014/12/05 面试题
采购主管岗位职责
2014/02/01 职场文书
授权委托书格式模板
2014/04/03 职场文书
老龄工作先进事迹
2014/08/15 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
vue数据字典取键值项目的字典问题
2022/04/12 Vue.js