javascript-抽象工厂模式

抽象工厂模式笔记
   1.抽象工厂模式创建多个抽象类,创建出的结果是一个类簇(这里是抽象类的集合)
   2.抽象工厂中传入的父类是否是抽象工厂方法创建的抽象类进行判断,不是则抛出错误
   3.子类通过抽象工厂方法(寄生式继承)继承父类(抽象工厂创建的抽象类)的属性和方法
 原型式继承

  1. 1 function inheritobject(o){
  2. 2 //声明一个过渡函数对象
  3. 3 function F(){
  4. 4 }
  5. 5 //过渡原型对象继承父对象
  6. 6 F.prototype=o;
  7. 7 //返回过渡对象的一个实列,该实例的原型继承了父对象
  8. 8 return new F();
  9. 9 }

寄生式继承 继承原型

  1. 1 /*
  2. 2 *寄生式继承 继承原型
  3. 3 * 传递参数subclass 子类
  4. 4 * 传递参数superclass 父类
  5. 5 * */
  6. 6 function inheritPrototype(subclass,superclass){
  7. 7 //复制一份父类的原型副本保存在变量中
  8. 8 var p=inheritobject(superclass.prototype);
  9. 9 //修正因为重写子类原型导致子类的constructor属性被修改
  10. 10 p.constructor=subclass;
  11. 11 //设置子类原型
  12. 12 subclass.prototype=p;
  13. 13 }

抽象工厂方法

  1. 1 //抽象工厂方法
  2. 2 var VehicleFactory=function(subtype,supertype){
  3. 3 //supertype通过typeof判断是否是抽象工厂模式创建的抽象类
  4. 4 if(typeof VehicleFactory[supertype] === 'function'){
  5. 5 inheritPrototype(subtype,supertype);
  6. 6 }else{
  7. 7 throw new Error('未创建该抽象类');
  8. 8 }
  9. 9 }

抽象工厂方法创建抽象类

  1. 1 VehicleFactory.Car=function(){
  2. 2 this.type='car';
  3. 3 }
  4. 4
  5. 5 VehicleFactory.Car.prototype={
  6. 6 getPrice:function(){
  7. 7 return new Error("抽象方法不能调用");
  8. 8 },
  9. 9 getSpeed:function(){
  10. 10 return new Error("抽象方法不能调用");
  11. 11 },
  12. 12 getColor:function(){
  13. 13 return new Error("抽象方法不能调用");
  14. 14 }
  15. 15 }
  16. 16
  17. 17 VehicleFactory.Bus=function(){
  18. 18 this.type='bus';
  19. 19 }
  20. 20 VehicleFactory.Bus.prototype={
  21. 21 getPrice:function(){
  22. 22 return new Error("抽象方法不能调用");
  23. 23 },
  24. 24 getSpeed:function(){
  25. 25 return new Error("抽象方法不能调用");
  26. 26 }
  27. 27 }

宝马汽车子类

  1. 1 var BMW =function(price,speed){
  2. 2 this.price=price;
  3. 3 this.speed=speed;
  4. 4 }
  5. 5 //抽象工厂实现对Car抽象类 的继承
  6. 6 VehicleFactory(BMW,'Car');
  7. 7 BMW.prototype.getPrice = function(){
  8. 8 return this.price;
  9. 9 }
  10. 10 BMW.prototype.getSpeed = function(){
  11. 11 return this.speed;
  12. 12 }

测试代码

  1. 1 var BMWObject = new BMW(100,100);
  2. 2 console.log(BMWObject.getPrice());
  3. 3 console.log(BMWObject.getColor());

随笔 javascript-抽象工厂模式的更多相关文章

  1. javascript抽象工厂模式

    <!doctype html><html lang="en"><head> <meta charset="UTF-8" ...

  2. [设计模式] javascript 之 抽象工厂模式

    抽象工厂模式说明 1. 工厂方法模式的问题: 在工厂方法模式里,创建类都需要通过 工厂类,如果要扩展程序,就必须修改工厂类,这违背了闭包原则,对扩展开放,对修改关闭:对于设计有一定的问题. 2. 如何 ...

  3. 再起航,我的学习笔记之JavaScript设计模式06(抽象工厂模式)

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前两 ...

  4. 再起航,我的学习笔记之JavaScript设计模式07(抽象工厂模式)

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前两 ...

  5. javascript设计模式-抽象工厂模式

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 结合实例分析简单工厂模式&工厂方法模式&抽象工厂模式的区别

    之前写过一篇关于工厂模式(Factory Pattern)的随笔,里面分析了简单工厂模式,但对于工厂方法和抽象工厂的分析较为简略.这里重新分析分析三者的区别,工厂模式是java设计模式中比较简单的一个 ...

  7. 简单工厂模式&工厂方法模式&抽象工厂模式的区别

    之前写过一篇关于工厂模式(Factory Pattern)的随笔,里面分析了简单工厂模式,但对于工厂方法和抽象工厂的分析较为简略.这里重新分析分析三者的区别,工厂模式是java设计模式中比较简单的一个 ...

  8. PHP设计模式(三)抽象工厂模式(Abstract Factory For PHP)

    一.什么是抽象工厂模式 抽象工厂模式的用意为:给客户端提供一个接口,可以创建多个产品族中的产品对象 ,而且使用抽象工厂模式还要满足以下条件: 系统中有多个产品族,而系统一次只可能消费其中一族产品. 同 ...

  9. 面向对象设计模式纵横谈:Abstract Factory 抽象工厂模式(笔记记录)

         今天是设计模式的第二讲,抽象工厂的设计模式,我们还是延续老办法,一步一步的.演变的来讲,先来看看一个对象创建的问题. 1.如何创建一个对象 常规的对象创建方法: 这样的创建对象没有任何问题, ...

随机推荐

  1. cnblogs博客迁移到hexo

    cnblogs博客备份 备份地址:https://i.cnblogs.com/BlogBackup.aspx?type=1 备份文件为xml格式,打开备份文件,如下所示: <?xml versi ...

  2. 在编写JSP的时候出现XXX cannot be resolved to a type

    今天遇到这个情况,却发现是eclipse抽风,说javax.servlet.http.Cookie找不到定义,但是经过浏览器测试,可以运行,而JSP源文件中eclipse死活要报错.表示无语. 关于e ...

  3. 网页尺寸offsetHeight,offsetWidth

    网页尺寸offsetHeight offsetHeight和offsetWidth,获取网页内容高度和宽度(包括滚动条等边线,会随窗口的显示大小改变). 一.值 offsetHeight = clie ...

  4. [Linux内核]软中断与硬中断

    转自:http://blog.csdn.net/zhangskd/article/details/21992933 本文主要内容:硬中断 / 软中断的原理和实现 内核版本:2.6.37 Author: ...

  5. linux -- camera shot 拍照功能

    #include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> ...

  6. finals的使用

    //----------------------------------------Finals--------------------------- public class Finals { pu ...

  7. android jni log

    在编写的jni时,经常需要输出打印信息进行调试,而C中printf在jni中没有效果,这时就需要使用NDK提供的函数. 1. jni中包含头文件 #include <android/log.h& ...

  8. 深入理解Mybatis中sqlSessionFactory机制原理

    对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章将通过以下几点详细介绍MyBatis的初始化过程. 1.MyBatis的初始化做了什么 2. MyBatis基于XML配置 ...

  9. OAuth认证协议原理分析及同步消息到Twitter和Facebook使用方法

    OAuth有什么用?为什么要使用OAuth? twitter或豆瓣用户一定会发现,有时候,在别的网站,点登录后转到 twitter登录,之后转回原网站,你会发现你已经登录此网站了,这种网站就是这个效果 ...

  10. 将数据写入TXT文件中,file_put_contents与fwrite

    <?php header("content-type:text/html;charset=utf-8"); $file = './aa.txt'; ###判断是不是文件 if ...