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触发器详解
Mar 10 Javascript
Javascript 调试利器 Firebug使用详解六
Jul 05 Javascript
jquery.simple.tree插件 更简单,兼容性更好的无限树插件
Sep 03 Javascript
在iframe里的页面编写js,实现在父窗口上创建动画效果展开和收缩的div(不变动iframe父窗口代码)
Dec 20 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
May 07 Javascript
jquery中取消和绑定hover事件的实现代码
Jun 02 Javascript
JavaScript中的事件委托及好处
Jul 12 Javascript
AngularJS出现$http异步后台无法获取请求参数问题的解决方法
Nov 03 Javascript
用iframe实现不刷新整个页面上传图片的实例
Nov 18 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
Jan 19 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
Dec 20 jQuery
javascript实现蒙版与禁止页面滚动
Jan 11 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
MySQL GBK→UTF-8编码转换
2007/05/24 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
PHP $O00OO0=urldecode & eval 解密,记一次商业源码的去后门
2020/09/13 PHP
javascript引导程序
2008/10/26 Javascript
js 判断一个元素是否在页面中存在
2012/12/27 Javascript
Javascript Memoizer浅析
2014/10/16 Javascript
jquery使用hide方法隐藏指定id的元素
2015/03/30 Javascript
JavaScript中定义类的方式详解
2016/01/07 Javascript
AngularJS之自定义服务详解(factory、service、provider)
2017/04/14 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
详解vue-cli中使用rem,vue自适应
2019/05/06 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
2020/12/14 Vue.js
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
Python切片用法实例教程
2014/09/08 Python
Python实现生成简单的Makefile文件代码示例
2015/03/10 Python
python先序遍历二叉树问题
2017/11/10 Python
python 定时修改数据库的示例代码
2018/04/08 Python
python网络爬虫学习笔记(1)
2018/04/09 Python
Python3实现的判断回文链表算法示例
2019/03/08 Python
python爬虫开发之Request模块从安装到详细使用方法与实例全解
2020/03/09 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
2020/03/13 Python
keras自定义回调函数查看训练的loss和accuracy方式
2020/05/23 Python
整理HTML5的一些新特性与Canvas的常用属性
2016/01/29 HTML / CSS
土木工程毕业生自荐信
2013/11/12 职场文书
计算机专业推荐信范文
2013/11/27 职场文书
志愿者服务感言
2014/02/27 职场文书
马智宇婚礼主持词
2014/03/22 职场文书
实习护士自荐信
2014/06/21 职场文书
先进教师个人总结
2015/02/11 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书
借条格式范本
2015/05/25 职场文书
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS
Python Pandas知识点之缺失值处理详解
2021/05/11 Python
Python实现排序方法常见的四种
2021/07/15 Python
海贼王十大逆天果实 魂魂果实上榜,岩浆果实攻击力最强
2022/03/18 日漫