JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析


Posted in Javascript onJuly 26, 2018

本文实例讲述了JavaScript设计模式之工厂模式和抽象工厂模式定义与用法。分享给大家供大家参考,具体如下:

1、工厂模式:

虽然Object构造函数和对象字面量都可以用来创建单个对象,但这个方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量重复的代码。为了解决这个问题,开始使用工厂模式。

利用工厂模式,可以实现不指定特定的类而创建出对象,也就是说,不需要使用new关键字来创建特定类或子类的实例。

var TravelTeam = function(){};
TravelTeam.prototype = {
 register : function(model){
  var person;
  switch(type){
   case "student":
    person = new Student();
    break;
   case "teacher":
    person = new Teacher();
    break;
   default:
    person = new Doctor();
    break;
  }
  return person;
 }
}
var team = new TravelTeam();
team.register(student");

问题:大多数情形下使用没有问题,但扩展性不好,如需要添加一些新的队员类型,必须修改switch部分。

解决:工厂模式,把相同的部分单独出来交给一个简单的工厂对象:

var TeamFactory = {
 createTeam:function(type){
  var person;
  switch(type){
   case "student":
    person = new Student();
    break;
   case "teacher":
    person = new Teacher();
    break;
   default:
    person = new Doctor();
    break;
  }
  return person;
 }
}

TeamFactory是一个脱离于TravelTeam的单体,能降低耦合度,当需要添加一些新的队员类型的时候,只要修改TeamFactory工厂单体对象就行。

var TravelTeam = function(){};
TravelTeam.prototype = {
 register:function(type){
  var person = TeamFactory.createTeam(type);
  return person;
 }
}

工厂模式的问题:虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即不知道对象的类型)。

解决:构造器模式,请见://3water.com/article/144495.htm。

2、抽象工厂模式

在工厂模式的基础上进行更高层次的抽象,根据共同的用途或主题来抽象出一个最高层基础工厂类,其他具有相似行为的工厂类将继承于此工厂类。

最典型的例子是了解HTML5与HTML4表单域的不同之处后,抽象出最高层的表单域工厂类,HTML5表单域工厂类和HTML4表单域工厂类都继承自该类。

工厂模式与抽象工厂模式的不同:

① 当需要在代码的其余所有部分通过屏蔽较为复杂的对象创建方法来简化某些特定对象的创建过程时,使用工厂模式很适合;

② 当需要从现有代码中的多个类中,根据这些类之间共有的目的或通用的主题,创建出一个额外的抽象层,以降低应用程序的其余开发工作的复杂性时,使用抽象工厂模式很适合。

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
非常不错的一个javascript 类
Nov 07 Javascript
初学js 新节点的创建 删除 的步骤
Jul 04 Javascript
javascript如何动态加载表格与动态添加表格行
Nov 27 Javascript
纯js实现仿QQ邮箱弹出确认框
Apr 29 Javascript
jQuery的css() 方法使用指南
May 03 Javascript
javascript日期计算实例分析
Jun 29 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
Jun 01 Javascript
Node.js中的cluster模块深入解读
Jun 11 Javascript
Vue指令指令大全
Feb 09 Javascript
微信小程序8种数据通信的方式小结
Feb 03 Javascript
原生js实现简单轮播图
Oct 26 Javascript
vue+swiper实现左右滑动的测试题功能
Oct 30 Javascript
vue父组件异步获取数据传给子组件的方法
Jul 26 #Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
Jul 26 #Javascript
JavaScript设计模式之单例模式原理与用法实例分析
Jul 26 #Javascript
JavaScript设计模式之原型模式分析【ES5与ES6】
Jul 26 #Javascript
如何把vuejs打包出来的文件整合到springboot里
Jul 26 #Javascript
JavaScript中变量提升与函数提升经典实例分析
Jul 26 #Javascript
基于Vue实现微信小程序的图文编辑器
Jul 25 #Javascript
You might like
让PHP以ROOT权限执行系统命令的方法
2011/02/10 PHP
jQuery 源码分析笔记
2011/05/25 PHP
php获得url参数中具有&的值的方法
2014/03/05 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
2015/12/18 PHP
PHP6新特性分析
2016/03/03 PHP
php中序列化与反序列化详解
2017/02/13 PHP
PDO::query讲解
2019/01/29 PHP
php抽象类和接口知识点整理总结
2019/08/02 PHP
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
js解决select下拉选不中问题
2014/10/14 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
避免jQuery名字冲突 noConflict()方法
2016/07/30 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
原生javascript实现图片放大镜效果
2017/01/18 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
vue-resourse将json数据输出实例
2017/03/08 Javascript
React-router v4 路由配置方法小结
2017/08/08 Javascript
JavaScript同源策略和跨域访问实例详解
2018/04/03 Javascript
关于layui 下拉列表的change事件详解
2019/09/20 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
2020/03/10 Javascript
Python的Django框架中settings文件的部署建议
2015/05/30 Python
Python基于pygame实现的font游戏字体(附源码)
2015/11/11 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
python中return的返回和执行实例
2019/12/24 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
Python多个装饰器的调用顺序实例解析
2020/05/22 Python
QT5 Designer 打不开的问题及解决方法
2020/08/20 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
用CSS3实现无限循环的无缝滚动的实例代码
2017/07/04 HTML / CSS
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
升学宴学生答谢词
2015/01/05 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
小学生安全教育心得体会
2016/01/15 职场文书