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 相关文章推荐
网上应用的一个不错common.js脚本
Aug 08 Javascript
js操作二级联动实现代码
Jul 27 Javascript
Node.js开发指南中的简单实例(mysql版)
Sep 17 Javascript
判断window.onload是否多次使用的方法
Sep 21 Javascript
js实现点击图片自动提交action的简单方法
Oct 16 Javascript
canvas实现弧形可拖动进度条效果
May 11 Javascript
Vue2.0实现购物车功能
Jun 05 Javascript
bootstrap日期插件daterangepicker使用详解
Oct 19 Javascript
详解plotly.js 绘图库入门使用教程
Feb 23 Javascript
JS数组求和的常用方法实例小结
Jan 07 Javascript
Layui实现数据表格默认全部显示(不要分页)
Oct 26 Javascript
详解vite+ts快速搭建vue3项目以及介绍相关特性
Feb 25 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 上一篇,下一篇文章实现代码与原理说明
2010/05/09 PHP
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
php实现购物车功能(上)
2020/07/23 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
jQuery中的.bind()、.live()和.delegate()之间区别分析
2011/06/08 Javascript
javascript date格式化示例
2013/09/25 Javascript
JS验证身份证有效性示例
2013/10/11 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
javascript中attachEvent用法实例分析
2015/05/14 Javascript
JS操作XML实例总结(加载与解析XML文件、字符串)
2015/12/08 Javascript
angularjs 表单密码验证自定义指令实现代码
2016/10/27 Javascript
React入门教程之Hello World以及环境搭建详解
2017/07/11 Javascript
vue2.0 computed 计算list循环后累加值的实例
2018/03/07 Javascript
jQuery 导航自动跟随滚动的实现代码
2018/05/30 jQuery
JS多个异步请求 按顺序执行next实现解析
2019/09/16 Javascript
原生js实现分页效果
2020/09/23 Javascript
Python连接mssql数据库编码问题解决方法
2015/01/01 Python
对Python实现简单的API接口实例讲解
2018/12/10 Python
分析运行中的 Python 进程详细解析
2019/06/22 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
opencv设置采集视频分辨率方式
2019/12/10 Python
python实现低通滤波器代码
2020/02/26 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
2020/05/08 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
html5实现滑块功能之type="range"属性
2020/02/18 HTML / CSS
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
巴西购物网站:Estrela10
2018/12/13 全球购物
乌克兰在线电子产品商店:MTA
2019/11/14 全球购物
数据库面试要点基本概念
2013/10/31 面试题
会计专业自我评价
2014/02/12 职场文书
培训讲师岗位职责
2014/04/13 职场文书
单位工作证明
2014/10/07 职场文书
主持人大赛开场白
2015/05/29 职场文书