您的位置:首页 > Web前端 > JavaScript

随笔 javascript-抽象工厂模式

2016-10-20 21:42 113 查看
随笔

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());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: