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 相关文章推荐
JS按位非(~)运算符与~~运算符的理解分析
Jul 31 Javascript
js 距离某一时间点时间是多少实现代码
Oct 14 Javascript
jquery禁用右键示例
Apr 28 Javascript
简单的JS时钟实例讲解
Jan 13 Javascript
canvas实现探照灯效果
Feb 07 Javascript
JavaScript实现经纬度转换成地址功能
Mar 28 Javascript
vue初尝试--项目结构(推荐)
Jan 30 Javascript
JS数组去重常用方法实例小结【4种方法】
May 28 Javascript
vue中的ref和$refs的使用
Nov 22 Javascript
详解微信小程序网络请求接口封装实例
May 02 Javascript
vuex 动态注册方法 registerModule的实现
Jul 03 Javascript
vue实现动态表格提交参数动态生成控件的操作
Nov 09 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中date()日期函数有关参数整理
2011/07/19 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
2015/09/30 PHP
老生常谈php 正则中的i,m,s,x,e分别表示什么
2017/03/02 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
解决laravel查询构造器中的别名问题
2019/10/17 PHP
use jscript Create a SQL Server database
2007/06/16 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
基于JavaScript实现继承机制之构造函数+原型链混合方式的使用详解
2013/05/07 Javascript
IE6-8中Date不支持toISOString的修复方法
2014/05/04 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
jquery实现多屏多图焦点图切换特效的方法
2015/05/04 Javascript
JavaScript对象数组排序函数及六个用法
2015/12/23 Javascript
浅析javascript函数表达式
2016/02/10 Javascript
jQuery表单元素选择器代码实例
2017/02/06 Javascript
纯js仿淘宝京东商品放大镜功能
2017/03/02 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
vue中使用axios post上传头像/图片并实时显示到页面的方法
2018/09/27 Javascript
关于微信小程序登录的那些事
2019/01/08 Javascript
详解vue几种主动刷新的方法总结
2019/02/19 Javascript
[01:03:36]Ti4 循环赛第三日DK vs Titan
2014/07/12 DOTA
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
vue.js实现输入框输入值内容实时响应变化示例
2018/07/07 Python
python调用自定义函数的实例操作
2019/06/26 Python
Django1.11配合uni-app发起微信支付的实现
2019/10/12 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
2020/09/01 Python
PyTorch 中的傅里叶卷积实现示例
2020/12/11 Python
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
乌克兰在线商店的价格比较:Price.ua
2019/07/26 全球购物
学习方法演讲稿
2014/05/10 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
护士长2015年终工作总结
2015/04/24 职场文书
元旦晚会开场白
2015/05/29 职场文书
信息技术远程培训心得体会
2016/01/09 职场文书
《大禹治水》教学反思
2016/02/22 职场文书