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 相关文章推荐
jquery简单体验
Jan 10 Javascript
基于Jquery实现键盘按键监听
May 11 Javascript
js日期范围初始化得到前一个月日期的方法
May 05 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
Jan 22 Javascript
解析javascript瀑布流原理实现图片滚动加载
Mar 10 Javascript
详解js中的apply与call的用法
Jul 30 Javascript
简单的渐变轮播插件
Jan 12 Javascript
基于vue的fullpage.js单页滚动插件
Mar 20 Javascript
angularjs实现对表单输入改变的监控(ng-change和watch两种方式)
Aug 29 Javascript
解决angularjs service中依赖注入$scope报错的问题
Oct 02 Javascript
IE11下处理Promise及Vue的单项数据流问题
Jul 24 Javascript
vue自定义正在加载动画的例子
Nov 14 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+mysql扎实个人基本功
2008/03/27 PHP
php simplexmlElement操作xml的命名空间实现代码
2011/01/04 PHP
解析mysql中UNIX_TIMESTAMP()函数与php中time()函数的区别
2013/06/24 PHP
zf框架的校验器使用使用示例(自定义校验器和校验器链)
2014/03/13 PHP
Zend Framework实现将session存储在memcache中的方法
2016/03/22 PHP
PHP pthreads v3在centos7平台下的安装与配置操作方法
2020/02/21 PHP
JavaScript中var关键字的使用详解
2015/08/14 Javascript
详解AngularJS中的filter过滤器用法
2016/01/04 Javascript
全面了解JavaScript对象进阶
2016/07/19 Javascript
浅谈Angular4中常用管道
2017/09/27 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
3种vue组件的书写形式
2017/11/29 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
微信小程序实现的picker多级联动功能示例
2019/05/23 Javascript
Vue-CLI项目中路由传参的方式详解
2019/09/01 Javascript
原生js实现分页效果
2020/09/23 Javascript
vue添加自定义右键菜单的完整实例
2020/12/08 Vue.js
python实现的简单抽奖系统实例
2015/05/22 Python
python制作最美应用的爬虫
2015/10/28 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
python 限制函数调用次数的实例讲解
2018/04/21 Python
Python采集猫眼两万条数据 对《无名之辈》影评进行分析
2018/12/05 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
PIL对上传到Django的图片进行处理并保存的实例
2019/08/07 Python
Python传递参数的多种方式(小结)
2019/09/18 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
python的json包位置及用法总结
2020/06/21 Python
python speech模块的使用方法
2020/09/09 Python
python装饰器代码深入讲解
2021/03/01 Python
美国椅子和沙发制造商:La-Z-Boy
2020/10/25 全球购物
质量保证书格式模板
2015/02/27 职场文书
学校禁毒宣传活动总结
2015/05/08 职场文书
MySQL 数据类型选择原则
2021/05/27 MySQL
使用Pytorch实现two-head(多输出)模型的操作
2021/05/28 Python
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL