工厂模式 之三 笼统工厂模式

作者 : 开心源码 本文共2062个字,预计阅读时间需要6分钟 发布时间: 2022-05-12 共275人阅读

笼统工厂模式:创立的不是一个真实的对象实例,而是一个类簇,定制了类的结构。

通过对类的工厂笼统,使业务用于对产品类簇的创立,而不负责创立某一类产品的实例。

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解压,如遇到无法解压的请联系管理员
开心源码网 » 工厂模式 之三 笼统工厂模式

发表回复