javascript 模式设计之工厂模式详细说明


Posted in Javascript onMay 10, 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 相关文章推荐
jquery获取html元素的绝对位置和相对位置的方法
Jun 20 Javascript
jQuery简单实现网页选项卡特效
Nov 24 Javascript
jQuery实现瀑布流布局
Dec 12 Javascript
浅谈JavaScript Array对象
Dec 29 Javascript
仿JQuery输写高效JSLite代码的一些技巧
Jan 13 Javascript
Bootstrap每天必学之进度条
Nov 30 Javascript
JS中递归函数
Jun 17 Javascript
js基础之DOM中document对象的常用属性方法详解
Oct 28 Javascript
javascript垃圾收集机制的原理分析
Dec 08 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
May 22 Javascript
详解Vue.js 响应接口
Jul 04 Javascript
javascript中layim之查找好友查找群组
Feb 06 Javascript
javascript 精粹笔记
May 09 #Javascript
javascript之通用简单的table选项卡实现(二)
May 09 #Javascript
javascript动态添加表格数据行(ASP后台数据库保存例子)
May 08 #Javascript
使用jQuery向asp.net Mvc传递复杂json数据-ModelBinder篇
May 07 #Javascript
javascript 通用简单的table选项卡实现
May 07 #Javascript
jQuery 创建Dom元素
May 07 #Javascript
10个基于jQuery或JavaScript的WYSIWYG 编辑器整理
May 06 #Javascript
You might like
php生成txt文件标题及内容的方法
2014/01/16 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
在Iframe中获取父窗口中表单的值(示例代码)
2013/11/22 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
wap图片滚动特效无css3元素纯js脚本编写
2014/08/22 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
javascript RegExp 使用说明
2016/05/21 Javascript
JS实现隐藏同级元素后只显示JS文件内容的方法
2016/09/04 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
JavaScript trim 实现去除字符串首尾指定字符的简单方法
2016/12/27 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
js实现扫雷小程序的示例代码
2017/09/27 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
Vue中插入HTML代码的方法
2018/09/21 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
2018/09/29 Javascript
JavaScript类型相关的常用操作总结
2019/02/14 Javascript
vue组件之间通信方式实例总结【8种方式】
2019/02/22 Javascript
详解js中let与var声明变量的区别
2020/04/05 Javascript
layer弹出层扩展主题的方法
2019/09/11 Javascript
微信小程序 scroll-view 实现锚点跳转功能
2019/12/12 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
Node.js API详解之 querystring用法实例分析
2020/04/29 Javascript
微信小程序中target和currentTarget的区别小结
2020/11/06 Javascript
在Python中处理字符串之isdecimal()方法的使用
2015/05/20 Python
浅析Python四种数据类型
2018/09/26 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
Python ini文件常用操作方法解析
2020/04/26 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
详解HTML5之pushstate、popstate操作history,无刷新改变当前url
2017/03/15 HTML / CSS
安纳塔拉酒店度假村及水疗官方网站:Anantara Hotel
2016/08/25 全球购物
合作协议书
2014/04/23 职场文书
运动会口号霸气押韵
2015/12/24 职场文书
Python实现数据的序列化操作详解
2022/07/07 Python
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js