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 相关文章推荐
Code:findPosX 和 findPosY
Dec 20 Javascript
一个对于js this关键字的问题
Jan 09 Javascript
在IE中调用javascript打开Excel的代码(downmoon原作)
Apr 02 Javascript
JQuery 遮罩层实现(mask)实现代码
Jan 09 Javascript
jquery 最简单易用的表单验证插件
Feb 27 Javascript
jQuery与其它库冲突的解决方法
Jun 25 Javascript
js异步加载的三种解决方案
Mar 04 Javascript
jQuery阻止事件冒泡具体实现
Oct 11 Javascript
javascript关于继承的用法汇总
Dec 20 Javascript
第八篇Bootstrap下拉菜单实例代码
Jun 21 Javascript
利用iscroll4实现轮播图效果实例代码
Jan 11 Javascript
JS实现自动轮播图效果(自适应屏幕宽度+手机触屏滑动)
Jun 19 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
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
php变量范围介绍
2012/10/15 PHP
destoon实现调用自增数字从1开始的方法
2014/08/21 PHP
Laravel框架学习笔记(一)环境搭建
2014/10/15 PHP
php计算年龄精准到年月日
2015/11/17 PHP
phpstudy2018升级MySQL5.5为5.7教程(图文)
2018/10/24 PHP
php快速导入大量数据的实例方法
2019/09/23 PHP
Extjs学习笔记之二 初识Extjs之Form
2010/01/07 Javascript
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
js如何调用qq互联api实现第三方登录
2014/03/28 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
javascript瀑布流布局实现方法详解
2016/02/17 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
Vue.js每天必学之构造器与生命周期
2016/09/05 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
20行js代码实现的贪吃蛇小游戏
2017/06/20 Javascript
jQuery插件artDialog.js使用与关闭方法示例
2017/10/09 jQuery
vue.js指令v-for使用以及下标索引的获取
2019/01/31 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
vue实现导航菜单和编辑文本的示例代码
2020/07/04 Javascript
[01:35]2018年度CS GO最佳战队-完美盛典
2018/12/17 DOTA
Python命令行解析模块详解
2018/02/01 Python
Python实现读取字符串按列分配后按行输出示例
2018/04/17 Python
python安装pywin32clipboard的操作方法
2019/01/24 Python
Python实现的调用C语言函数功能简单实例
2019/03/13 Python
Python 仅获取响应头, 不获取实体的实例
2019/08/21 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
2020/02/20 Python
深入了解Python装饰器的高级用法
2020/08/13 Python
Python字符串查找基本操作代码案例
2020/10/27 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
治安消防安全责任书
2014/07/23 职场文书
简单的辞职信怎么写
2015/02/28 职场文书
朋友聚会开场白
2015/06/01 职场文书
拥有这5个特征人,“命”都不会太差
2019/08/16 职场文书