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 相关文章推荐
js 时间格式与时间戳的相互转换示例代码
Dec 25 Javascript
node.js中的http.request方法使用说明
Dec 14 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
Jan 24 Javascript
jQuery实现非常实用漂亮的select下拉菜单选择效果
Nov 06 Javascript
使用JQuery实现图片轮播效果的实例(推荐)
Oct 24 jQuery
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
Dec 15 Javascript
详解为Bootstrap Modal添加拖拽的方法
Jan 05 Javascript
webpack 打包压缩js和css的方法示例
Mar 20 Javascript
vue2.0 实现导航守卫的具体用法(路由守卫)
May 17 Javascript
详解微信小程序scroll-view横向滚动的实践踩坑及隐藏其滚动条的实现
Mar 14 Javascript
layui多图上传实现删除功能的例子
Sep 23 Javascript
Vue实现腾讯云点播视频上传功能的实现代码
Aug 17 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采集相关教程之一 CURL函数库
2010/02/15 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
php 访问oracle 存储过程实例详解
2017/01/08 PHP
php实现数据库的增删改查
2017/02/26 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
PHPstorm启用自动换行的方法详解(IDE)
2020/09/17 PHP
IE6 fixed的完美解决方案
2011/03/31 Javascript
自己动手制作jquery插件之自动添加删除行的实现
2011/10/13 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
js格式化时间和js格式化时间戳示例
2014/02/10 Javascript
jquery.cookie.js使用指南
2015/01/05 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
vue在使用ECharts时的异步更新和数据加载详解
2017/11/22 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
2018/01/10 Javascript
Vue 路由切换时页面内容没有重新加载的解决方法
2018/09/01 Javascript
微信小程序全局变量的设置、使用、修改过程解析
2019/09/24 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
vue-socket.io跨域问题有效解决方法
2020/02/11 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
基于JavaScript实现简单抽奖功能代码实例
2020/10/20 Javascript
vue封装自定义指令之动态显示title操作(溢出显示,不溢出不显示)
2020/11/12 Javascript
JavaScript构造函数原理及实现流程解析
2020/11/19 Javascript
JavaScript实现京东快递单号查询
2020/11/30 Javascript
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
python实现百度关键词排名查询
2014/03/30 Python
什么是触发器(trigger)? 触发器有什么作用?
2013/09/18 面试题
夏季奶茶店创业计划书
2014/01/16 职场文书
函授生自我鉴定
2014/03/25 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
学校社团活动总结
2015/05/07 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android