抽象工厂模式:通过对类的工厂抽象使其业务用于对产品类簇的创建,而不负责创建某一类产品的实例

抽象类

//测试抽象类,使用其实例方法时会抛出错误
var test = function(){};
test.prototype = {getFirst:function(){return new Error('抽象方法不可调用');},getSecond:function(){return new Error('抽象方法不可调用!');}
};

在上面的代码中,test类什么都不能做,创建时没有任何属性,原型上的方法也不能使用。但是在继承上是很有用的,因为定义了一种类,并定义了其方法,如果在子类中重写其方法,就不会出现报错。

但是如果必要的方法从父类中继承过来而没有去具体去重写实现,那么实例化对象会调用父类中的方法。如果父类中有提示的话,是非常有帮助的。这就是抽象类的作用所在。

抽象工厂模式

var myTest = function(subType,superType){//判断抽象工厂中是否有该抽象类if(typeof myTest[superType] === 'function'){//缓存类function F(){};//继承父类的方法和属性F.prototype = new myTest[superType]();//将子类constructor指向子类subType.constructor = subType;//子类原型继承“父类”subType.prototype = new F();}else{//不存在该抽象类抛出错误throw new Error("未创建抽象类!!!");}
}
myTest.first = function(){this.type = 'first';};myTest.first.prototype = {getFirst:function(){return new Error('抽象方法不可调用');},getSecond:function(){return new Error('抽象方法不可调用!');}};myTest.second = function(){this.type = 'second';};myTest.second.prototype = {getFirst:function(){return new Error('抽象方法不可调用');},getSecond:function(){return new Error('抽象方法不可调用!');}};

抽象工厂其实是一个实现子类继承父类的方法,在这个方法中要通过传递子类以及要继承父类(抽象类)的名称,并在抽象工厂方法中又增加了一次对抽象类存在性的一次判断,如果存在,就会继承父类的方法。

注意:在对过渡类的原型继承时,不是继承父类的原型,而是通过new关键字复制父类的一个实例。因为不仅仅要继承父类的原型方法,更要继承父类的对象属性。

实现

一个测试用例,展示继承的使用

//第一个测试子类var firstTest = function(firstParameter,secondParameter){this.firstParameter = firstParameter;this.secondParameter = secondParameter;};//抽象工厂实现对test抽象类的继承myTest(firstTest,'test');firstTest.prototype.getFirst = function(){return this.firstParameter;}firstTest.prototype.getSecond = function(){return this.secondParameter;}

总结

抽象工厂模式是设计模式中最抽象的一个,也是唯一一种抽象化创建模式。创建出来的不是一个真正的对象实例,而是一个类簇,它制定了类的结构,区别于简单工厂模式创建单一对象工厂方法模式创建多类对象。由于Javascript不支持抽象化创建与虚拟方法,应用不太广泛。

Javascript设计模式(三)-- 抽象工厂模式相关推荐

  1. 设计模式三—抽象工厂模式

    设计模式三-抽象工厂模式 一.定义 抽象工厂模式是工厂方法模式的进一步抽象.如果产品簇中只有一种产品,则退化为工厂方法模式. 二.原理图 三.代码实例 * 苹果和土豆是园丁1的杰作 * 葡萄和西红柿是 ...

  2. 浅析设计模式(三)——抽象工厂模式

    抽象工厂模式(Abstract-Factory,创建型模式) 本文的结构: 一.抽象工厂模式的定义 二.抽象工厂模式的参与者及其角色 三.抽象工厂模式的类图 四.抽象工厂模式的示例 五.参考 一.抽象 ...

  3. 设计模式之四(抽象工厂模式第三回合)

    原文:设计模式之四(抽象工厂模式第三回合) 前言 抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 抽象工厂模式最大的好处便是易于交换产品系列,由于具体工厂类,例如I ...

  4. C#设计模式(4)——抽象工厂模式

    C#设计模式(4)--抽象工厂模式 一.引言 在上一专题中介绍了工厂方法模式,工厂方法模式是为了克服简单工厂模式的缺点而设计出来的,简单工厂模式的工厂类随着产品类的增加需要增加额外的代码),而工厂方法 ...

  5. 设计模式系列·抽象工厂模式

    前言 以小说的笔法写的设计模式系列文章,你绝对看得懂![首发于公众号:"聊聊代码"] 设计模式系列·王小二需求历险记(一) 设计模式系列·王小二需求历险记(二) 设计模式系列·封装 ...

  6. 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern)

    原文:乐在其中设计模式(C#) - 抽象工厂模式(Abstract Factory Pattern) [索引页] [源码下载] 乐在其中设计模式(C#) - 抽象工厂模式(Abstract Facto ...

  7. 设计模式复习-抽象工厂模式

    设计模式复习-抽象工厂模式 有两种硬件,PC和Phone,有两种系统,Windows和Linux,现在假设PC和Phone上全都能安装这两个系统,并且将来硬件不会在变化,但是系统可能需要扩展,比如扩展 ...

  8. python抽象工厂模式_Python设计模式之抽象工厂模式

    Python设计模式之抽象工厂模式 这篇文章主要为大家详细介绍了Python设计模式之抽象工厂模式,感兴趣的小伙伴们可以参考一下 python面向对象编程入门,我们需要不断学习进步 "&qu ...

  9. 设计模式-04抽象工厂模式

    设计模式-04抽象工厂模式 文章中涉及到的代码,请自行下载 https://gitee.com/pan_xiao_lei123/designmode.git 前面介绍的工厂方法模式中考虑的是一类产品的 ...

  10. 设计模式(6)[JS版]-JavaScript如何实现抽象工厂模式?

    目录 1 学习目标 2 什么是抽象工厂模式? 3 抽象工厂模式作用 4 工厂模式参与者 5 代码实现 1 学习目标 通过本篇文章的学习,你应当掌握以下知识: 1 知道什么是抽象工厂模式? 2 掌握抽象 ...

最新文章

  1. python 列表 随机采样_Python 随机抽样
  2. 【Qt】QObject详解
  3. lambda ::表达式_Lambda表达式和流API:基本示例
  4. 应用程序添加到服务器,在同一应用程序中的配置服务器和eureka服务器:尝试连接到localhost:8761...
  5. 前端 HTML 常用标签 head标签相关内容 script标签
  6. java 的对象类用_java基础(第零篇)对象与类
  7. regsvr32.exe
  8. SQLSERVER数据库设置varchar类型主键自增方法
  9. mysql 分库分表中间件 mycat_Mysql—分库分表中间件(Mycat)
  10. 假想参考解码器 vbv HRD
  11. 02 Jmonkey3.2.0+Nifty1.4.2实现GUI
  12. java读取Excel里面的内容包括(xls和xlsx)后缀文件
  13. [BJDCTF 2nd]燕言燕语-y1ng解析
  14. 计算机组装部zho,PowerPC汇编实现BES Ⅲ数据获取读出系统机箱级数据组装
  15. 安卓手机绘制uml图_UML图是用什么软件画的?
  16. 沉没之城中文破解版 v1.0免安装绿色版
  17. mysql update 负数_解决并发情况下库存减为负数问题--update2016.04.24
  18. 完美解决安装MySQL Install/Remove of the Service Denied!错误解决办法
  19. 关于Unity 2d动画实现
  20. 各种场合的说话技巧之19例

热门文章

  1. ShapeNet:超实时人脸特征点检测与形状拟合开源库
  2. 【TensorFlow】TensorFlow函数精讲之tf.constant()
  3. 聊聊研读论文有哪些经验之谈?
  4. 写给小白的自然语言处理入门简介
  5. 你听过算法也是可以贪心的吗?
  6. 复练-关于面试的科技树-简历的提升、问答环节
  7. 如果服务器开机显示NObootable,电脑开机出现“No bootable device”的解决办法
  8. c语言string函数的用法_同一个函数的五六个版本,C++string insert函数详解
  9. 软件测试java三角形形状判定,软件测试技术基础实验——Junit 安装与 三角形问题的测试...
  10. chrome vue插件_「Vue学习记录一」开发环境准备