javascript-抽象工厂模式
抽象工厂模式笔记 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()); 相关推荐
Kingonion 2020-05-01
codercheng 2019-11-10
bleach00 2010-11-17
Yellowpython 2019-06-25
liupinghui 2019-06-21
特 2009-11-06
loganjr 2011-10-18
姜海强 2019-03-14
ainizhongguoaa 2016-08-25
luoxinyurose 2016-03-02
PythonBiglove 2016-01-16
LHpython 2019-01-15
PHP100 2019-03-28
PHP100 2019-03-28
PHP100 2019-03-27
vczh的日常 2018-04-12