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中各种编码解码函数的区别和注意事项
Aug 19 Javascript
Knockoutjs的环境搭建教程
Nov 26 Javascript
JS防止用户多次提交的简单代码
Aug 01 Javascript
jQuery获取访问者IP地址的方法(基于新浪API与QQ查询接口)
May 25 Javascript
原生js实现自由拖拽弹窗代码demo
Jun 29 Javascript
利用Angularjs和Bootstrap前端开发案例实战
Aug 27 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
Mar 13 Javascript
原生JS发送异步数据请求
Jun 08 Javascript
vuejs手把手教你写一个完整的购物车实例代码
Jul 06 Javascript
vue.js通过路由实现经典的三栏布局实例代码
Jul 08 Javascript
Intellij IDEA搭建vue-cli项目的方法步骤
Oct 20 Javascript
JavaScript交换变量的常用方法小结【4种方法】
May 07 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
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
2018/04/20 PHP
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
JavaScript模板引擎用法实例
2015/07/10 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
全面了解js中的script标签
2016/07/04 Javascript
js实现文字无缝向上滚动
2017/02/16 Javascript
js实现点击切换checkbox背景图片的简单实例
2017/05/08 Javascript
详解Vue.js分发之作用域槽
2017/06/13 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
python实现进程间通信简单实例
2014/07/23 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
pandas 条件搜索返回列表的方法
2018/10/30 Python
利用Python正则表达式过滤敏感词的方法
2019/01/21 Python
Django admin.py 在修改/添加表单界面显示额外字段的方法
2019/08/22 Python
wxpython实现按钮切换界面的方法
2019/11/19 Python
python opencv实现信用卡的数字识别
2020/01/12 Python
解决python3输入的坑——input()
2020/12/05 Python
使用CSS3的::selection改变选中文本颜色的方法
2015/09/29 HTML / CSS
CSS3 实现穿梭星空动画
2020/11/13 HTML / CSS
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
请说出几个常用的异常类
2013/01/08 面试题
const char*, char const*, char*const的区别是什么
2014/07/09 面试题
大学生村官典型材料
2014/01/12 职场文书
新年爱情寄语
2014/04/08 职场文书
前台岗位职责
2015/02/13 职场文书
党校个人总结
2015/03/04 职场文书
2015年副班长工作总结
2015/05/15 职场文书
关于远足的感想
2015/08/10 职场文书
爱心捐款倡议书:点燃希望,传递温暖
2019/11/04 职场文书
python批量更改目录名/文件名的方法
2021/04/18 Python
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android
解决MySQL Varchar 类型尾部空格的问题
2022/04/06 MySQL