欢迎来到代码驿站!

JavaScript代码

当前位置:首页 > 网页前端 > JavaScript代码

JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析

时间:2021-10-18 10:05:29|栏目:JavaScript代码|点击:

本文实例讲述了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;
 }
}

工厂模式的问题:虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即不知道对象的类型)。

解决:构造器模式,请见://www.jb51.net/article/144495.htm

2、抽象工厂模式

在工厂模式的基础上进行更高层次的抽象,根据共同的用途或主题来抽象出一个最高层基础工厂类,其他具有相似行为的工厂类将继承于此工厂类。

最典型的例子是了解HTML5与HTML4表单域的不同之处后,抽象出最高层的表单域工厂类,HTML5表单域工厂类和HTML4表单域工厂类都继承自该类。

工厂模式与抽象工厂模式的不同:

① 当需要在代码的其余所有部分通过屏蔽较为复杂的对象创建方法来简化某些特定对象的创建过程时,使用工厂模式很适合;

② 当需要从现有代码中的多个类中,根据这些类之间共有的目的或通用的主题,创建出一个额外的抽象层,以降低应用程序的其余开发工作的复杂性时,使用抽象工厂模式很适合。

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结

希望本文所述对大家JavaScript程序设计有所帮助。

上一篇:微信小程序实现简单计算器

栏    目:JavaScript代码

下一篇:基于JavaScript实现自定义滚动条

本文标题:JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析

本文地址:http://www.codeinn.net/misctech/180354.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有