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 拖放效果实现代码
Jan 22 Javascript
为jquery的ajaxfileupload增加附加参数的方法
Mar 04 Javascript
jquery动态添加删除(tr/td)
Feb 09 Javascript
BootStrap glyphicons 字体图标实现方法
May 01 Javascript
jQuery购物网页经典制作案例
Aug 19 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
Jan 13 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
Jul 04 Javascript
ionic 3.0+ 项目搭建运行环境的教程
Aug 09 Javascript
VUE 3D轮播图封装实现方法
Jul 03 Javascript
基于Vue2-Calendar改进的日历组件(含中文使用说明)
Apr 14 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
Sep 18 Javascript
JS写滑稽笑脸运动效果
May 28 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维护文件系统
2006/10/09 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
php从文件夹随机读取文件的方法
2015/06/01 PHP
JQuery操作tr和td内容的方法实例
2013/03/06 Javascript
jquery实现textarea输入字符控制(仿微博输入控制字符)
2013/04/26 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
JS模拟键盘打字效果的方法
2015/08/05 Javascript
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
2016/04/18 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
老生常谈javascript中逻辑运算符&&和||的返回值问题
2017/04/13 Javascript
用p5.js制作烟花特效的示例代码
2018/03/21 Javascript
vue组件之间通信方式实例总结【8种方式】
2019/02/22 Javascript
vue动态注册组件实例代码详解
2019/05/30 Javascript
Vue利用Blob下载原生二进制数组文件
2019/09/25 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
Bootstrap实现前端登录页面带验证码功能完整示例
2020/03/26 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
Python检测一个对象是否为字符串类的方法
2015/05/21 Python
python selenium UI自动化解决验证码的4种方法
2018/01/05 Python
Sanic框架请求与响应实例分析
2018/07/16 Python
Django 接收Post请求数据,并保存到数据库的实现方法
2019/07/12 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
kafka监控获取指定topic的消息总量示例
2019/12/23 Python
Pytorch上下采样函数--interpolate用法
2020/07/07 Python
文秘自荐信
2013/10/20 职场文书
小学生安全保证书
2014/02/01 职场文书
事业单位竞聘上岗实施方案
2014/03/28 职场文书
工作求职自荐信
2014/06/13 职场文书
2014小学年度工作总结
2014/12/20 职场文书
《称赞》教学反思
2016/02/17 职场文书
Python利器openpyxl之操作excel表格
2021/04/17 Python
Python上下文管理器Content Manager
2021/06/26 Python