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 sort排序使用方法
Oct 17 Javascript
asp.net网站开发中用jquery实现滚动浏览器滚动条加载数据(类似于腾讯微博)
Mar 14 Javascript
javascript获取设置div的高度和宽度兼容任何浏览器
Sep 22 Javascript
jQuery中find()方法用法实例
Jan 07 Javascript
Jquery实现弹性滑块滑动选择数值插件
Aug 08 Javascript
javascript url几种编码方式详解
Jun 06 Javascript
Ubuntu系统下Angularjs开发环境安装
Sep 01 Javascript
js仿京东轮播效果 选项卡套选项卡使用
Jan 12 Javascript
React Native 使用Fetch发送网络请求的示例代码
Dec 02 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
Feb 02 Javascript
一个小时快速搭建微信小程序的方法步骤
Apr 15 Javascript
3分钟读懂移动端rem使用方法(推荐)
May 06 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
php5.3 goto函数介绍和示例
2014/03/21 PHP
YII2.0之Activeform表单组件用法实例
2016/01/09 PHP
PHP使用JpGraph绘制折线图操作示例【附源码下载】
2019/10/18 PHP
一个页面元素appendchild追加到另一个页面元素的问题
2013/01/27 Javascript
jQuery 追加元素的方法如append、prepend、before
2014/01/16 Javascript
javascript求日期差的方法
2016/03/02 Javascript
基于hover的用法实例(推荐)
2017/07/04 Javascript
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
2019/08/26 Javascript
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
Django中使用locals()函数的技巧
2015/07/16 Python
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
Python实现动态图解析、合成与倒放
2018/01/18 Python
python 串口读取+存储+输出处理实例
2019/12/26 Python
Jupyter notebook如何实现指定浏览器打开
2020/05/13 Python
什么是python的id函数
2020/06/11 Python
CSS3使用多列制作瀑布流
2016/05/10 HTML / CSS
英国最大的宠物商店:Pets at Home
2019/04/17 全球购物
波兰购物网站:MALL.PL
2019/05/01 全球购物
Currentbody西班牙:美容仪专家
2019/09/28 全球购物
介绍下Java的输入输出流
2014/01/22 面试题
介绍一下木马病毒的种类
2015/07/26 面试题
客户代表实习人员自我鉴定
2013/09/27 职场文书
自动化毕业生专业自荐书范文
2014/02/04 职场文书
给老婆大人的检讨书
2014/02/24 职场文书
劳动竞赛口号
2014/06/16 职场文书
流动人口婚育证明
2014/10/19 职场文书
民用住房租房协议书
2014/10/29 职场文书
2014年质检员工作总结
2014/11/18 职场文书
单位领导婚礼致辞
2015/07/28 职场文书
pytorch Dropout过拟合的操作
2021/05/27 Python
基于Pygame实现简单的贪吃蛇游戏
2021/12/06 Python
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL
索尼ICF-5900W收音机测评
2022/04/24 无线电