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 相关文章推荐
新页面打开实际尺寸的图片
Aug 25 Javascript
js 火狐下取本地路径实现思路
Apr 02 Javascript
JS如何判断移动端访问设备并解析对应CSS
Nov 27 Javascript
JQuery教学之性能优化
May 14 Javascript
使用JQuery FancyBox插件实现图片展示特效
Nov 16 Javascript
JS实现简单易用的手机端浮动窗口显示效果
Sep 07 Javascript
Vuejs 组件——props数据传递的实例代码
Mar 07 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
Mar 20 Javascript
node.js遍历目录的方法示例
Aug 01 Javascript
vue组件表单数据回显验证及提交的实例代码
Aug 30 Javascript
基于原生js实现九宫格算法代码实例
Jul 03 Javascript
原生JavaScript实现简单五子棋游戏
Jun 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 daddslashes()和 saddslashes()有哪些区别分析
2012/10/26 PHP
PHP  Yii清理缓存的实现方法
2016/11/10 PHP
JS日历 推荐
2006/12/03 Javascript
javascript定时保存表单数据的代码
2011/03/17 Javascript
JavaScript获取FCK编辑器信息的具体方法
2013/07/12 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
js创建对象的区别示例介绍
2014/07/24 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
JS数组去重(4种方法)
2017/03/27 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
React Native之prop-types进行属性确认详解
2017/12/19 Javascript
使用微信小程序开发弹出框应用实例详解
2018/10/18 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
jQuery实现的导航条点击后高亮显示功能示例
2019/03/04 jQuery
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
小程序调用微信支付的方法
2019/09/26 Javascript
JavaScript设计模型Iterator实例解析
2020/01/22 Javascript
[04:40]2016国际邀请赛中国区预选赛全程TOP10镜头集锦
2016/07/01 DOTA
Python基于ThreadingTCPServer创建多线程代理的方法示例
2018/01/11 Python
Python中optparser库用法实例详解
2018/01/26 Python
Pandas 同元素多列去重的实例
2018/07/03 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
对python Tkinter Text的用法详解
2018/10/11 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
python文件拆分与重组实例
2018/12/10 Python
pandas dataframe添加表格框线输出的方法
2019/02/08 Python
Python 、Pycharm、Anaconda三者的区别与联系、安装过程及注意事项
2019/10/11 Python
Django REST框架创建一个简单的Api实例讲解
2019/11/05 Python
Python中 Global和Nonlocal的用法详解
2020/01/20 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
学生打架检讨书1000字
2014/01/16 职场文书
领导调研接待方案
2014/02/27 职场文书
社区好人好事材料
2014/12/26 职场文书