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加解密功能页面
Dec 12 Javascript
JavaScript类和继承 prototype属性
Sep 03 Javascript
获取客户端电脑日期时间js代码(jquery)
Sep 12 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
Feb 28 Javascript
jQuery制作简单柱状图实例
Jan 28 Javascript
JS给超链接加确认对话框的方法
Feb 24 Javascript
基于jquery实现下拉框美化特效
Feb 02 Javascript
在JS中a标签加入单击事件屏蔽href跳转页面
Dec 16 Javascript
微信小程序 tabs选项卡效果的实现
Jan 05 Javascript
Bootstrap 手风琴菜单的实现代码
Jan 20 Javascript
JS控制GIF图片的停止与显示
Oct 24 Javascript
Js逆向实现滑动验证码图片还原的示例代码
Mar 10 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 无极分类(递归)实现代码
2010/01/05 PHP
html静态页面调用php文件的方法
2014/11/13 PHP
php简单统计中文个数的方法
2016/09/30 PHP
激活 ActiveX 控件
2006/10/09 Javascript
javascript下数值型比较难点说明
2010/06/07 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
用js实现in_array的方法
2013/11/05 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
jQuery Ztree行政地区树状展示(点击加载)
2016/11/09 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
2017/08/26 jQuery
如何通过javaScript去除字符串两端的空白字符
2020/02/06 Javascript
design vue 表格开启列排序的操作
2020/10/28 Javascript
python网络编程实例简析
2014/09/26 Python
将Python代码打包为jar软件的简单方法
2015/08/04 Python
Python爬虫设置代理IP的方法(爬虫技巧)
2018/03/04 Python
Python实现的生产者、消费者问题完整实例
2018/05/30 Python
Python找出微信上删除你好友的人脚本写法
2018/11/01 Python
Django中的静态文件管理过程解析
2019/08/01 Python
Python3 获取文件属性的方式(时间、大小等)
2020/03/12 Python
解决django中form表单设置action后无法回到原页面的问题
2020/03/13 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
分公司经理岗位职责
2013/11/11 职场文书
大一新生军训时的自我评价分享
2013/12/05 职场文书
应届实习生的自我评价范文
2014/01/05 职场文书
社团活动总结范文
2014/04/26 职场文书
小区文明倡议书
2014/05/16 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
九华山导游词
2015/02/03 职场文书
小学生交通安全寄语
2015/02/27 职场文书
2016年春节问候语
2015/11/11 职场文书
详解nodejs内置模块
2021/05/06 NodeJs
收音机爱好者玩机13年,简评其使用过的19台收音机
2022/04/30 无线电
Spring Security动态权限的实现方法详解
2022/06/16 Java/Android