工厂模式 之三 笼统工厂模式
笼统工厂模式:创立的不是一个真实的对象实例,而是一个类簇,定制了类的结构。
通过对类的工厂笼统,使业务用于对产品类簇的创立,而不负责创立某一类产品的实例。
JavaScript不能像其余语言(例如java)那样创立笼统类,但是可以收到在笼统类的方法中抛出错误来模式笼统类
模拟笼统类
定以一个产品簇,公告少量必备方法,若子类没有重写则抛出错误
const Car = function(){}Car.prototype = { getPrice(){ return new Error('抽方法不能被调用') }, getSpeed(){ return new Error('抽方法不能被调用') }}笼统工厂模式
用笼统类作为父类创立少量子类
- 笼统工厂方法
const VehicleFactory = function(subType,superType){ //判断抽工厂中能否有该笼统类 if(typeof VehicleFactory[superType] === 'function'){ //缓存类 function F(){} //继承父类属性和方法 F.prototype = new VehicleFactory[superType](); // 将子类constructor指向子类 superType.constructor = subType //子类原型继承‘父类’ subType.prototype = new F() }else{ //不存在该笼统类抛出错误 throw new Error('未创立该笼统类') }}- 小汽车笼统类
VehicleFactory.Car = function(){ this.type = 'car'}VehicleFactory.Car.prototype = { getPrice(){ return new Error('抽方法不能被调用') }, getSpeed(){ return new Error('抽方法不能被调用') }}- 公交车笼统类
VehicleFactory.Bus = function(){ this.type = 'bus'}VehicleFactory.Bus.prototype = { getPrice(){ return new Error('抽方法不能被调用') }, getPassenerNum(){ return new Error('抽方法不能被调用') }}- 货车笼统类
VehicleFactory.Truck = function(){ this.type = 'truck'}VehicleFactory.Bus.prototype = { getPrice(){ return new Error('抽方法不能被调用') }, getTrainload(){ return new Error('抽方法不能被调用') }}笼统工厂其实是一个实现子类继承(寄生式继承)父类的方法
笼统工厂是用了创立子类(本例是让子类继承父类,是对子类进行扩展)
让产品子类继承相对应的产品簇笼统类
- 宝马汽车子类
const 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}- 比亚迪公交车子类
const BYD = function(price,passenger){ this.price = price this.passenger = passenger}//笼统工厂实现对Bus笼统类的继承VehicleFactory(BYD,'Bus')VehicleFactory.prototype.getPrice = function(){ return this.price}VehicleFactory.prototype.getPassenerNum = function(){ return this.passenger}- 奔驰汽车子类
const BenzTruck = function(price,trainload) { this.price = price this.trainload = trainload}//笼统工厂实现对Bus笼统类的继承VehicleFactory(BenzTruck,'Truck')VehicleFactory.prototype.getPrice = function(){ return this.price}VehicleFactory.prototype.getTrainload = function(){ return this.trainload}通过笼统工厂,可以知道每个子类属于哪一种类别,
也具有该类别必备的属性和方法
const truck = new BenzTruck(100000,1000)console.log(truck.getPrice())console.log(truck.type)说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 工厂模式 之三 笼统工厂模式
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 工厂模式 之三 笼统工厂模式