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 相关文章推荐
通过JAVASCRIPT读取ASP设定的COOKIE
Feb 15 Javascript
javascript中interval与setTimeOut的区别示例介绍
Mar 14 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形网络(1)
Nov 30 Javascript
基于javascript实现彩票随机数生成(简单版)
Apr 17 Javascript
基于Bootstrap3表格插件和分页插件实例详解
May 17 Javascript
jQuery图片轮播插件——前端开发必看
May 31 Javascript
详解RequireJS按需加载样式文件
Apr 12 Javascript
js每隔两秒输出数组中的一项(实例)
May 28 Javascript
jquery实现回车键触发事件(实例讲解)
Nov 21 jQuery
ionic3实战教程之随机布局瀑布流的实现方法
Dec 28 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
Feb 07 Javascript
浅谈vuex中store的命名空间
Nov 08 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中判断字符串是否全是中文或含有中文的实现代码
2011/09/16 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
php适配器模式简单应用示例
2019/10/23 PHP
zeroclipboard复制到剪切板的flash
2010/08/04 Javascript
JS获取页面窗口大小的代码解读
2011/12/01 Javascript
js去字符串前后空格5种实现方法及比较
2013/04/03 Javascript
jquery单行文字向上滚动效果示例
2014/03/06 Javascript
JavaScript极简入门教程(一):基础篇
2014/10/25 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
jQuery插件实现带圆点的焦点图片轮播切换
2016/01/18 Javascript
很全面的JavaScript常用功能汇总集合
2016/01/22 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
2016/07/04 Javascript
关于input全选反选恶心的异常情况
2016/07/24 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
jQuery编写textarea输入字数限制代码
2017/03/23 jQuery
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
JS+CSS实现滚动数字时钟效果
2017/12/25 Javascript
vue-router 组件复用问题详解
2018/01/22 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
JS的Ajax与后端交互数据的实例
2018/08/08 Javascript
Java多线程编程中ThreadLocal类的用法及深入
2016/06/21 Python
Python字符串对象实现原理详解
2019/07/01 Python
Python3远程监控程序的实现方法
2019/07/15 Python
python 公共方法汇总解析
2019/09/16 Python
Python实现把多维数组展开成DataFrame
2019/11/30 Python
python自动识别文本编码格式代码
2019/12/26 Python
英国最大的独立玩具专卖店:The Entertainer
2019/09/06 全球购物
会计专业自荐信范文
2013/12/02 职场文书
入团者的自我评价分享
2013/12/02 职场文书
运动会口号大全
2014/06/07 职场文书
合伙购房协议样本
2014/10/06 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书
JavaScript高级程序设计之变量与作用域
2021/11/17 Javascript