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 加载和执行-性能提高篇
Dec 28 Javascript
js判断FCKeditor内容是否为空的两种形式
May 14 Javascript
每天一篇javascript学习小结(面向对象编程)
Nov 20 Javascript
详解JavaScript对象和数组
Dec 03 Javascript
理解javascript中的严格模式
Feb 01 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
Oct 24 Javascript
jQuery操作DOM_动力节点Java学院整理
Jul 04 jQuery
ES6学习教程之Map的常用方法总结
Aug 03 Javascript
解决npm管理员身份install时出现权限的问题
Mar 16 Javascript
vue cli3 配置proxy代理无效的解决
Oct 30 Javascript
vue-cli3项目升级到vue-cli4 的方法总结
Mar 19 Javascript
JavaScript读取本地文件常用方法流程解析
Oct 12 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相当简单的分页类
2008/10/02 PHP
php 接口类与抽象类的实际作用
2009/11/26 PHP
解析PHP的session过期设置
2013/06/29 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
2017/07/10 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
JS 实现Json查询的方法实例
2013/04/12 Javascript
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
jQuery实现文本展开收缩特效
2015/06/03 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
jQuery Ajax请求后台数据并在前台接收
2016/12/10 Javascript
Vue.js如何优雅的进行form validation
2017/04/07 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
JS实现小球的弹性碰撞效果
2017/11/11 Javascript
微信小程序实现两边小中间大的轮播效果的示例代码
2018/12/07 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
深入理解JavaScript 箭头函数
2019/05/30 Javascript
vue props 单项数据流实例分享
2020/02/16 Javascript
JS如何寻找数组中心索引过程解析
2020/06/01 Javascript
python处理PHP数组文本文件实例
2014/09/18 Python
Python 通过URL打开图片实例详解
2017/06/01 Python
答题辅助python代码实现
2018/01/16 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
python使用opencv驱动摄像头的方法
2018/08/03 Python
widows下安装pycurl并利用pycurl请求https地址的方法
2018/10/15 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
突袭HTML5之Javascript API扩展3—本地存储全新体验
2013/01/31 HTML / CSS
Skyscanner英国:苏格兰的全球三大领先航班搜索服务之一
2017/11/09 全球购物
欧洲最古老的鞋厂:Peter Kaiser
2019/11/05 全球购物
第一范式(1NF)、第二范式(2NF)和第三范式(3NF)之间的区别是什么?
2016/04/28 面试题
C#中的验证控件有几种
2014/03/08 面试题
预备党员党校学习自我评价分享
2013/11/12 职场文书
风险评估实施方案
2014/03/09 职场文书
入职担保书范文
2014/05/21 职场文书
公司门卫工作职责
2014/06/28 职场文书
信访维稳工作汇报
2014/10/27 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书