javascript-抽象工厂模式

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

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

寄生式继承 继承原型

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

抽象工厂方法

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

抽象工厂方法创建抽象类

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

宝马汽车子类

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

测试代码

1             var BMWObject = new BMW(100,100);
2 console.log(BMWObject.getPrice());
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. 02、Universal app 中按钮图标使用

    前言,windows10 昨天凌晨发布了,windows store 开发模型比以前的 silverlight 模型由很多优势, 我也小兴奋了一把. 正文: 在 windows phone 8.0 以 ...

  2. jvm垃圾收集器之Throughput GC

    呃.HotSpot VM的GC组老人之一Jon Masamitsu很久之前就写过blog讲解这个:https://blogs.oracle.com/jonthecollector/entry/our_ ...

  3. SQL Server 2014 Agent 无法启动

    - <Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">- <System& ...

  4. word字号

    1 大特号 63 2 特 号 54 3 初 号 42 4 小初号 36 5 大一号 31.5 6 一 号 28 7 小一号 24 8 二 号 21 9 小二号 18 10 三 号 16 11 小三号  ...

  5. Windows Phone实用教程:利用Blend为程序添加设计时数据

    [前言] Blend自诞生那一天起就伴随这开发者如此的评价: 有VS还用Blend干啥,直接码代码就好了. Blend会生成一堆垃圾无用代码,很不爽. 对于这类我只会在心里评价,当你并不真正了解一样事 ...

  6. 一次完整的https过程

    参考: 1. 一次完整的HTTP事务是怎样一个过程? 2. The First Few Milliseconds of an HTTPS Connection 3. 也许,这样理解HTTPS更容易 4 ...

  7. JS 拖动原理

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. C++ const关键字修饰引用

    //const修饰引用的两种用法 #include<iostream> using namespace std; struct Teacher{ ]; int age; }; void S ...

  9. 静态内部类定义在类中,任何方法外,用static定义

    静态内部类:(注意:前三种内部类与变量类似,所以可以对照参考变量) 静态内部类定义在类中,任何方法外,用static定义. 静态内部类只能访问外部类的静态成员. 生成(new)一个静态内部类不需要外部 ...

  10. php -- php获取ip地址和主机名

    客户端IP相关的变量1. $_SERVER['REMOTE_ADDR']; 客户端IP,有可能是用户的IP,也有可能是代理的IP. 2. $_SERVER['HTTP_CLIENT_IP']; 代理端 ...