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读取ASP设定的COOKIE
Feb 15 Javascript
JavaScript库 开发规则
Jan 31 Javascript
JQuery为textarea添加maxlength属性并且兼容IE
Apr 25 Javascript
使用JSON作为函数的参数的优缺点
Oct 27 Javascript
JavaScript实现经典排序算法之选择排序
Dec 28 Javascript
在Vue中使用echarts的实例代码(3种图)
Jul 10 Javascript
使用webpack3.0配置webpack-dev-server教程
May 29 Javascript
Ajax请求时无法重定向的问题解决代码详解
Jun 21 Javascript
Angular8基础应用之表单及其验证
Aug 11 Javascript
npx create-react-app xxx创建项目报错的解决办法
Feb 17 Javascript
详解js中的几种常用设计模式
Jul 16 Javascript
如何在 Vue 表单中处理图片
Jan 26 Vue.js
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蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
java解析json方法总结
2019/05/16 PHP
JavaScript日历实现代码
2010/09/12 Javascript
JS控制图片翻转示例代码(兼容firefox,ie,chrome)
2013/12/19 Javascript
js,jquery滚动/跳转页面到指定位置的实现思路
2014/06/03 Javascript
javascript Deferred和递归次数限制实例
2014/10/21 Javascript
Jquery全选与反选点击执行一次的解决方案
2015/08/14 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
2015/12/17 Javascript
javascript从作用域链谈闭包
2020/07/29 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
微信小程序 表单Form实例详解(附源码)
2016/12/22 Javascript
jQuery实现别踩白块儿网页版小游戏
2017/01/18 Javascript
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
2018/05/25 Javascript
vue-cli2打包前和打包后的css前缀不一致的问题解决
2018/08/24 Javascript
JavaScript适配器模式原理与用法实例详解
2020/03/09 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
python安装与使用redis的方法
2016/04/19 Python
Python实现的简单dns查询功能示例
2017/05/24 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
django做form表单的数据验证过程详解
2019/07/26 Python
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
法律工作求职自荐信
2013/10/31 职场文书
会计主管岗位职责范文
2013/11/08 职场文书
大学生职业生涯设计书
2014/01/02 职场文书
大学生职业规划论文
2014/01/11 职场文书
路政管理求职信
2014/06/18 职场文书
党政领导班子四风问题对照检查材料思想汇报
2014/10/02 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
灵魂歌王观后感
2015/06/17 职场文书
环保建议书作文300字
2015/09/14 职场文书
导游词之西安骊山
2019/12/03 职场文书
javascript Number 与 Math对象的介绍
2021/11/17 Javascript
java中如何截取字符串最后一位
2022/07/07 Java/Android