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的匿名函数来分析几段简单有趣的代码
Jun 29 Javascript
window.ActiveXObject使用说明
Nov 08 Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
Jan 04 Javascript
怎么清空javascript数组
May 11 Javascript
基于javascript实现最简单的选项卡切换效果
May 16 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(二)
Sep 14 Javascript
详解Angular2响应式表单
Jun 14 Javascript
vue使用v-for实现hover点击效果
Sep 29 Javascript
微信小程序实现省市区三级地址选择
Jun 21 Javascript
Vue.js标签页组件使用方法详解
Oct 19 Javascript
JS实现骰子3D旋转效果
Oct 24 Javascript
原生js实现轮播图特效
May 04 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
关于BIG5-HKSCS的解决方法
2007/03/20 PHP
Linux下实现PHP多进程的方法分享
2012/08/16 PHP
PHP的几个常用加密函数
2016/02/03 PHP
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
JS数字抽奖游戏实现方法
2015/05/04 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
详解JavaScript基本类型和引用类型
2015/12/09 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
老生常谈javascript中逻辑运算符&&和||的返回值问题
2017/04/13 Javascript
jQuery复合事件结合toggle()方法的用法示例
2017/06/10 jQuery
微信小程序之选项卡的实现方法
2017/09/29 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
微信小程序实现通讯录列表展开收起
2020/11/18 Javascript
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
wxPython实现分隔窗口
2019/11/19 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
Django实现随机图形验证码的示例
2020/10/15 Python
Jupyter Notebook 安装配置与使用详解
2021/01/06 Python
基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码
2018/05/28 HTML / CSS
EVE LOM英国官网:全世界最好的洁面膏
2017/10/30 全球购物
销售行业个人求职自荐信
2013/09/25 职场文书
雪山饭庄的创业计划书范文
2014/01/18 职场文书
教师求职自荐信
2015/03/26 职场文书
公司庆典主持词
2015/07/04 职场文书
化工厂员工工作总结
2015/10/15 职场文书
2016年教师节特级教师获奖感言
2015/12/09 职场文书
导游词之烟台威海蓬莱
2019/11/14 职场文书
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js