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. homebrew 无法安装,提示不能在根目录下使用

    sudo chown -R $(whoami) /usr/local 把/use/local的owner換成自己,就有write權限了 whoami就是一個命令,會echo當前登錄用戶的名字.當然你知 ...

  2. Js 省市联动

    function cn(){ this.Items = {}; } cn.prototype.add = function(id,iArray){ this.Items[id] = iArray; } ...

  3. dp之01背包hdu2639(第k优解)

    http://acm.hdu.edu.cn/showproblem.php?pid=2639 题意:给出一行价值,一行体积,让你在v体积的范围内找出第k大的值.......(注意,不要 和它的第一题混 ...

  4. mysql 使用 temp

    whereis 软件 检查数据库mysqlcheck -uroot -p --all-databases 修复$ mysql -uroot -p databasename REPAIR TABLE t ...

  5. 基于HTML5自定义文字背景生成QQ签名档

    分享一款利用HTML5实现的自定义文字背景应用,首先我们可以输入需要显示的文字,并且为该文字选择一张背景图片,背景图片就像蒙版一样覆盖在文字上.点击生成QQ签名档即可将文字背景融为一体生成另外一张图片 ...

  6. div随页面滚动遇顶固定的两种方法(js&jQuery)

    一.遇顶固定的例子 我一直以为是某个div或层随屏幕滚动,遇顶则固定,离开浏览器顶部又还原这样的例子其实不少,其实它的名字叫“层的智能浮动效果”.目前我们在国内的商业网站上就常常看到这样的效果了.例如 ...

  7. gcc编译程序的流程

    >>gcc编译器 gcc编译器:(C语言的编译器gcc/g++) gcc编译程序的流程 源文件(.c)——>预处理(.i)——>编译——>汇编(.s)——>链接(. ...

  8. hdu 1253:胜利大逃亡(基础广搜BFS)

    胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submi ...

  9. hdu 1147:Pick-up sticks(基本题,判断两线段相交)

    Pick-up sticks Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  10. AWS系列-S3实现文件服务页面展示

    最近由于业务需求,对于备份的数据存放到S3上面,并需要页面展示.而且还能下载. 把这个桶里面的对象,都在某个静态页面展示.并且 我可以把这个对象下载下来. 首页内容就是 桶里面的对象. 并且可以随时查 ...