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 相关文章推荐
IE浏览器PNG图片透明效果代码
Sep 02 Javascript
JavaScript网页定位详解
Jan 13 Javascript
node.js中的http.response.setHeader方法使用说明
Dec 14 Javascript
Angular实现跨域(搜索框的下拉列表)
Feb 16 Javascript
jQuery日程管理控件glDatePicker用法详解
Mar 29 jQuery
vue中用H5实现文件上传的方法实例代码
May 27 Javascript
在 webpack 中使用 ECharts的实例详解
Feb 05 Javascript
JS文件中加载jquery.js的实例代码
May 05 jQuery
JS实现前端页面的搜索功能
Jun 12 Javascript
JS实现全屏预览F11功能的示例代码
Jul 23 Javascript
vue项目首屏加载时间优化实战
Apr 23 Javascript
js实现简单的无缝轮播效果
Sep 05 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
什么是调频(FM)、调幅(AM)、短波(SW)、长波(LW)
2021/03/01 无线电
整理的一些实用WordPress后台MySQL操作命令
2013/01/07 PHP
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
javascript demo 基本技巧
2009/12/18 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
动态载入js提高网页打开速度的方法
2014/07/04 Javascript
教你在heroku云平台上部署Node.js应用
2014/07/30 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
jquery图片切换插件
2015/03/16 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
jQuery延迟执行的实现方法
2016/12/21 Javascript
JavaScript 网页中实现一个计算当年还剩多少时间的倒数计时程序
2017/01/25 Javascript
nodejs个人博客开发第三步 载入页面
2017/04/12 NodeJs
vue+axios实现登录拦截的实例代码
2017/05/22 Javascript
解决webpack -p压缩打包react报语法错误的方法
2017/07/03 Javascript
微信小程序如何使用canvas二维码保存至手机相册
2019/07/15 Javascript
node实现mock-plugin中间件的方法
2019/12/25 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
2020/04/17 Javascript
[02:12]2019完美世界全国高校联赛(春季赛)报名开启
2019/03/01 DOTA
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
Python进程间通信之共享内存详解
2017/10/30 Python
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
Python实现的字典值比较功能示例
2018/01/08 Python
selenium python 实现基本自动化测试的示例代码
2019/02/25 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
2019/03/01 Python
详解Python self 参数
2019/08/30 Python
CSS3 transition 实现通知消息轮播条
2020/10/14 HTML / CSS
德国古洛迷亚百货官网:GALERIA Kaufhof
2017/06/20 全球购物
美国医疗用品、医疗设备和家庭保健用品商店:Medical Supply Depot
2018/07/08 全球购物
捷克建筑材料网上商店:DEK.cz
2021/03/06 全球购物
教师演讲稿范文
2014/01/08 职场文书
公司副总经理岗位职责
2014/10/01 职场文书
房屋产权证明书
2014/10/15 职场文书
简单的离婚协议书范本
2014/11/16 职场文书
道德模范事迹材料
2014/12/20 职场文书
导游词书写之黄山
2019/08/06 职场文书