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