抽象工厂模式:是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
抽象工厂模式的和工厂模式的区别在于:工厂模式是维护某类的实例、而抽象工厂模式是维护某类实例属于那个大类 场景 工厂模式:肯德基里面有炸鸡、有薯条….等等、那我们可以通过工厂模式创建出一个炸鸡实例! 抽象工厂模式:炸鸡里面又细分:孜然味、原味、麻辣味、那通过抽象的形式把都属于炸鸡的维护起来形成一个族类!
// 汽车产品class BMW{constructor(){this.name = '汽车-宝马'}run(){console.log('car---BMW')}}class BENZ{constructor(){this.name = '汽车-奔驰'}run(){console.log('car---BENZ')}}// 飞机产品class Helicopter{constructor(){this.name = '飞机-直升飞机'}run(){console.log('aircraft-Helicopter')}}// 抽象工厂类class AbstrctFactory{getCar(){throw new Error('请先实现子类方法')}getAircraft(){throw new Error('请先实现子类方法')}}// 汽车工厂class Car extends AbstrctFactory{getCar(type){switch(type){case 'bmw':return new BMW()case 'benz':return new BENZ()default:break;}}getAircraft(){return null;}}// 飞机工厂class Aircraft extends AbstrctFactory{getAircraft(type){switch(type){case 'helicopter':return new Helicopter()default:break;}}getCar(){return null;}}// 超级工厂类class SuperFactory{constructor(type){switch (type) {case 'car':return new Car();case 'aircraft':return new Aircraft();default:break;}}}// 根据抽象工厂获得汽车工厂let car = new SuperFactory('car');let mbwCar = car.getCar('bmw');mbwCar.run() // car---BMW// 根据抽象工厂获得飞机工厂let aircraft = new SuperFactory('aircraft');let helicopter = aircraft.getAircraft('helicopter');helicopter.run() // aircraft-Helicopter
