博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
随笔 javascript-抽象工厂模式
阅读量:4958 次
发布时间:2019-06-12

本文共 2815 字,大约阅读时间需要 9 分钟。

抽象工厂模式笔记
   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());

转载于:https://www.cnblogs.com/yuanyingke/p/5982724.html

你可能感兴趣的文章
React Native 的组件之底部导航栏 TabBarIOS(一)
查看>>
聊聊、SpringBoot 上传文件大小
查看>>
WF 学习笔记 (1) - 浅谈 WF 和 MVC 架构
查看>>
Monkey脚本API简介
查看>>
Linux学习笔记 之 Linux软件的安装与卸载
查看>>
在ASP.NET中,IE与Firefox下载文件带汉字名时乱码的解决方法
查看>>
从C#垃圾回收(GC)机制中挖掘性能优化方案
查看>>
HTTP Handlers and HTTP Modules in ASP.NET
查看>>
指定年月月初月末时间戳
查看>>
qt程序移植到安卓平台
查看>>
MySQL的SQL语句优化之Explain
查看>>
ionic改tab文字和icon图片的颜色
查看>>
atitit.提升开发效率---MDA 软件开发方式的革命(5)----列表查询建模
查看>>
atititi.soa 微服务 区别 联系 优缺点.doc
查看>>
Atitit.cateService分类管理新特性与设计文档说明v1
查看>>
Atitit.android播放smb 网络邻居视频文件解决方案
查看>>
WebAPI请求——js调用
查看>>
移位操作符
查看>>
LintCode 面试题 旋转字符串
查看>>
VBA---Basic
查看>>