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 Cookie 直接浏览网站分网址
Dec 08 Javascript
javascript开发中因空格引发的错误
Nov 08 Javascript
JS操作iframe里的dom(实例讲解)
Jan 29 Javascript
jQuery中:submit选择器用法实例
Jan 03 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
May 06 Javascript
javascript中this的四种用法
May 11 Javascript
JS实现微信弹出搜索框 多条件查询功能
Dec 13 Javascript
基于JavaScript实现表格滚动分页
Nov 22 Javascript
JS实现的贪吃蛇游戏案例详解
May 01 Javascript
教你搭建按需加载的Vue组件库(小结)
Jul 29 Javascript
基于js实现数组相邻元素上移下移
May 19 Javascript
何时使用Map来代替普通的JS对象
Apr 29 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插入排序实现代码
2013/04/04 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
基于jQuery的日期选择控件
2009/10/27 Javascript
jquery操作下拉列表、文本框、复选框、单选框集合(收藏)
2014/01/08 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
JavaScript数组方法总结分析
2016/05/06 Javascript
Highcharts学习之坐标轴
2016/08/02 Javascript
详解JavaScript作用域和作用域链
2019/03/19 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
uni-app如何实现增量更新功能
2020/01/03 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
2020/06/10 Javascript
python查找指定具有相同内容文件的方法
2015/06/28 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
python去除文件中重复的行实例
2018/06/29 Python
python 将列表中的字符串连接成一个长路径的方法
2018/10/23 Python
python实现简单加密解密机制
2019/03/19 Python
Python解析多帧dicom数据详解
2020/01/13 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
python利用递归方法实现求集合的幂集
2020/09/07 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
2020/12/16 Python
如何删除一个表里面的重复行
2013/07/13 面试题
武汉瑞得软件笔试题
2015/10/27 面试题
元旦促销方案
2014/03/15 职场文书
超越自我演讲稿
2014/05/21 职场文书
化学专业自荐信
2014/05/28 职场文书
关爱老人标语
2014/06/21 职场文书
师德师风自我评价范文
2014/09/11 职场文书
四风查摆剖析材料
2014/10/10 职场文书
工程部主管岗位职责
2015/02/12 职场文书
大学毕业生自我评价
2015/03/02 职场文书
关于上班时间调整的通知
2015/04/23 职场文书
SQL注入的实现以及防范示例详解
2021/06/02 MySQL
javascript之Object.assign()的痛点分析
2022/03/03 Javascript
Android Flutter实现3D动画效果示例详解
2022/04/07 Java/Android
Java中生成微信小程序太阳码的实现方案
2022/06/01 Java/Android