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

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

寄生式继承 继承原型

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

抽象工厂方法

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

抽象工厂方法创建抽象类

            VehicleFactory.Car=function(){
this.type='car';
} VehicleFactory.Car.prototype={
getPrice:function(){
return new Error("抽象方法不能调用");
},
getSpeed:function(){
return new Error("抽象方法不能调用");
},
getColor:function(){
return new Error("抽象方法不能调用");
}
} VehicleFactory.Bus=function(){
this.type='bus';
}
VehicleFactory.Bus.prototype={
getPrice:function(){
return new Error("抽象方法不能调用");
},
getSpeed:function(){
return new Error("抽象方法不能调用");
}
}

宝马汽车子类

            var BMW =function(price,speed){
this.price=price;
this.speed=speed;
}
//抽象工厂实现对Car抽象类 的继承
VehicleFactory(BMW,'Car');
BMW.prototype.getPrice = function(){
return this.price;
}
BMW.prototype.getSpeed = function(){
return this.speed;
}

测试代码

             var BMWObject = new BMW(100,100);
console.log(BMWObject.getPrice());
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. PHP设计模式(三)抽象工厂模式(Abstract Factory For PHP)

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

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

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

  8. Objective-C 工厂模式(下) -- 抽象工厂模式

    相比简单工厂模式, 只有一个工厂 能生产的手机也是固定的 抽象工厂模式类似于有很多家工厂, 当用户要买什么手机就创建对应的工厂去生产 比如用户要买iPhone就创建一个Apple工厂来生产手机, 要买 ...

  9. Net设计模式实例之抽象工厂模式(Abstract Factory Pattern)

    一.抽象工厂模式简介(Bref Introduction) 抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类.优点 ...

  10. .NET设计模式(2):1.2 抽象工厂模式(Abstract Factory)

    概述 抽象工厂模式(Abstract Factory)是所有形态的工厂模式中最为抽象和最具一般性的一种形态.抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式.抽象工厂模式可以向客户端提供一个接口 ...

随机推荐

  1. C# redis使用之ServiceStack

    需要注意的是:ServiceStack.Redis 中GetClient()方法,只能拿到Master redis中获取连接,而拿不到slave 的readonly连接.这样 slave起到了冗余备份 ...

  2. WebResource.axd 404 错误

    再对程序进行发布的时候,出现以下情况 复制出错误信息: 网页错误详细信息 用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Triden ...

  3. IIS8发布WCF接口中遇到的问题总结

    环境:系统Win8.1+VS2013+IIS8 在VS13中新建一个WCF服务应用程序,新建之后系统会默认给我们新建一个方法.

  4. 【C#进阶系列】19 可空值类型

    可空值类型,正如字面意义上的,是可以为NULL的值类型. 这个东西存在的意义可以解决比如数据库的的Int可以为NUll的情况,使得处理数据库数据更简单. 实际上可空值类型就是Nullable<T ...

  5. 自行实现PHP代码注解特性

    PHP 注解 到目前为止,PHP的反射特性中是不支持注解Annotation的,但是可以支持基本的文档注释内容的获取 ReflectionMethod::getDocComment() - 从5.1. ...

  6. 【算法和数据结构】_12_小算法_abs_fabsf_fabsd_大端小端判断

    最近学习要用到求绝对值函数,看了一下有很多种的abs函数,因此想自己实现这些代码. 下面是我进行测试的代码: #include <stdio.h> typedef unsigned int ...

  7. 【Linux_Fedora_应用系列】_4_安装chrome浏览器

    在前面一篇文章中,我们讨论了在Linux Fedora 14下安装WMV解码器:[Linux_Fedora_应用系列]_3_如何利用Smplayer播放WMV格式的文件 在文章中介绍的方法同样适合FC ...

  8. Swagger接入

    一 简介 Swagger是一个开源项目,用于描述和生成RestAPi的文档.可以帮助开发人员快速了解web服务的功能. 二  接入Swagger流程 1.在所在Module的pom.xml中,添加Sw ...

  9. MySQL高效分页解决方案集(转)

    很久以前的一次面试中,被面试官问到这个问题,由于平时用到的分页方法不多,只从索引.分表.使用子查询精准定位偏移以外,没有使用到其它方法. 后来在看其它博客看到了一些不同的方案,也一直没有整理.今天有时 ...

  10. mysql 导入text 到数据库

    load data local infile 'f:/PhoneLocation_201601.327665.txt' into table sys_t_phone_area fields termi ...