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 20 Javascript
Jquery利用mouseenter和mouseleave实现鼠标经过弹出层且可以点击
Feb 12 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
Mar 12 Javascript
jQuery原生的动画效果
Jul 10 Javascript
基于AngularJS+HTML+Groovy实现登录功能
Feb 17 Javascript
xtemplate node.js 的使用方法实例解析
Aug 22 Javascript
详解vue-router传参的两种方式
Sep 10 Javascript
通过js给网页加上水印背景实例
Jun 17 Javascript
vue配置文件实现代理v2版本的方法
Jun 21 Javascript
重学JS之显示强制类型转换详解
Jun 30 Javascript
JavaScript实现秒杀时钟倒计时
Sep 29 Javascript
JS如何在不同平台实现多语言方式
Jul 16 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生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
php获取文章上一页与下一页的方法
2014/12/01 PHP
php实现图片上传并进行替换操作
2016/03/15 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
PHP生成唯一ID之SnowFlake算法
2016/12/17 PHP
浅谈PHP错误类型及屏蔽方法
2017/05/27 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
Jquery+JSon 无刷新分页实现代码
2010/04/01 Javascript
jquery中dom操作和事件的实例学习 下拉框应用
2011/12/01 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
jqplot通过ajax动态画折线图的方法及思路
2013/12/08 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
JQuery.validate在ie8下不支持的快速解决方法
2016/05/18 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
vue路由跳转传递参数的方式总结
2020/05/10 Javascript
[01:07]2015国际邀请赛 中国区预选赛精彩回顾
2015/06/15 DOTA
python用pickle模块实现“增删改查”的简易功能
2017/06/07 Python
Python适配器模式代码实现解析
2019/08/02 Python
python装饰器使用实例详解
2019/12/14 Python
用pytorch的nn.Module构造简单全链接层实例
2020/01/14 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
解决pip install psycopg2出错问题
2020/07/09 Python
Python操作word文档插入图片和表格的实例演示
2020/10/25 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
2020/11/06 Python
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
英国高级健康和美容产品零售商:Life and Looks
2019/08/01 全球购物
2014年便民服务中心工作总结
2014/12/20 职场文书
升学宴家长答谢词
2015/09/29 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
巾帼建功标兵先进事迹材料
2016/02/29 职场文书
如何撰写创业策划书
2019/06/27 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL