抽象工厂模式:是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
抽象工厂模式的和工厂模式的区别在于:工厂模式是维护某类的实例、而抽象工厂模式是维护某类实例属于那个大类 场景 工厂模式:肯德基里面有炸鸡、有薯条….等等、那我们可以通过工厂模式创建出一个炸鸡实例! 抽象工厂模式:炸鸡里面又细分:孜然味、原味、麻辣味、那通过抽象的形式把都属于炸鸡的维护起来形成一个族类!
// 汽车产品
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