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 相关文章推荐
extjs3 combobox取value和text案例详解
Feb 06 Javascript
无闪烁更新网页内容JS实现
Dec 19 Javascript
更靠谱的H5横竖屏检测方法(js代码)
Sep 13 Javascript
JS高级运动实例分析
Dec 20 Javascript
bootstrap table配置参数例子
Jan 05 Javascript
jQuery实现对象转为url参数的方法
Jan 11 Javascript
php简单数据库操作类的封装
Jun 08 Javascript
基于JavaScript实现评论框展开和隐藏功能
Aug 25 Javascript
AngularJS实现动态切换样式的方法分析
Jun 26 Javascript
微信小程序API—获取定位的详解
Apr 30 Javascript
使用kbone解决Vue项目同时支持小程序问题
Nov 08 Javascript
Vue.js实现立体计算器
Feb 22 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
php下把数组保存为文件格式的实例应用
2010/02/08 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
php socket通信(tcp/udp)实例分析
2016/02/14 PHP
在Z-Blog中运行代码[html][/html](纯JS版)
2007/03/25 Javascript
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
html中table数据排序的js代码
2011/08/09 Javascript
什么是DOM(Document Object Model)文档对象模型
2012/03/05 Javascript
解析offsetHeight,clientHeight,scrollHeight之间的区别
2013/11/20 Javascript
jsPDF生成pdf后在网页展示实例
2014/01/16 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
2017/04/12 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
基于vue实现探探滑动组件功能
2020/05/29 Javascript
[02:36]DOTA2混沌骑士 英雄基础教程
2013/11/26 DOTA
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
Python文档生成工具pydoc使用介绍
2015/06/02 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
python移位运算的实现
2019/07/15 Python
使用OpCode绕过Python沙箱的方法详解
2019/09/03 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
python开发入门——列表生成式
2020/09/03 Python
HTML5新增加的功能详解
2016/09/05 HTML / CSS
Larsson & Jennings官网:现代瑞士钟表匠
2018/03/20 全球购物
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
下面这个程序执行后会有什么错误或者效果
2014/11/03 面试题
计算机专业推荐信范文
2013/11/20 职场文书
暑期社会实践感言
2014/02/25 职场文书
保护环境倡议书
2014/04/14 职场文书
工程催款通知书
2015/04/17 职场文书
趣味运动会口号
2015/12/24 职场文书
nginx容器方式反向代理实战
2022/04/18 Servers