时间:2021-05-18
以下就是作者学习中遇到的问题以及代码实例,最后还给大家关于JS抽象工厂模式的学习做了总结。
抽象工厂模式(Abstract Factory)就是通过类的抽象使得业务适用于一个产品类簇的创建,而不负责某一类产品的实例。
JS中是没有直接的抽象类的,abstract是个保留字,但是还没有实现,因此我们需要在类的方法中抛出错误来模拟抽象类,如果继承的子类中没有覆写该方法而调用,就会抛出错误。
const Car = function() { }Car.prototype.getPrice = function() {return new Error('抽象方法不能调用')}实现
面向对象的语言里有抽象工厂模式,首先声明一个抽象类作为父类,以概括某一类产品所需要的特征,继承该父类的子类需要实现父类中声明的方法而实现父类中所声明的功能:
/*** 实现subType类对工厂类中的superType类型的抽象类的继承* @param subType 要继承的类* @param superType 工厂类中的抽象类type*/const VehicleFactory = function(subType, superType) { if (typeof VehicleFactory[superType] === 'function') { function F() { this.type = '车辆' } F.prototype = new VehicleFactory[superType]() subType.constructor = subType subType.prototype = new F() // 因为子类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('抽象方法不可使用') }}const BMW = function(price, speed) { this.price = price this.speed = speed}VehicleFactory(BMW, 'Car') // 继承Car抽象类BMW.prototype.getPrice = function() { // 覆写getPrice方法 console.log(`BWM price is ${this.price}`)}BMW.prototype.getSpeed = function() { console.log(`BWM speed is ${this.speed}`)}const baomai5 = new BMW(30, 99)baomai5.getPrice() // BWM price is 30baomai5 instanceof VehicleFactory.Car // true总结
通过抽象工厂,就可以创建某个类簇的产品,并且也可以通过instanceof来检查产品的类别,也具备该类簇所必备的方法。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了JS设计模式之:工厂模式定义与实现方法。分享给大家供大家参考,具体如下:前言上次我们介绍了单例模式,没看过的小伙伴可以看这个链接:浅析JS设计模式
上一篇说到了工厂模式,那么学习了工厂模式,抽象工厂也得学习一下。实际上,抽象工厂模式实际上就是在工厂模式的基础上再嵌套一层工厂模式而已,通过父工厂制造子工厂。只
本文实例讲述了java设计模式之工厂模式。分享给大家供大家参考,具体如下:工厂模式(factory)涉及到4个角色:抽象工厂类角色,具体工厂类角色,抽象产品类角
本文实例讲述了Python设计模式之抽象工厂模式原理与用法。分享给大家供大家参考,具体如下:抽象工厂模式(AbstractFactoryPattern):提供一
定义:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。类型:创建类模式类图:抽象工厂模式与工厂方法模式的区别抽象工厂模式是工厂方法模式的升