前面理解了工厂模式,抽象工厂模式建立在工厂模式之上,简单的来讲就是当有很多工厂时候,对工厂进行统一管理
先把之前的工厂拿过来
class Dog {
call() {
console.log("小狗 汪 汪 汪")
}
}
class Cat {
call() {
console.log("小猫 喵 喵 喵")
}
}
class Pig {
call() {
console.log("小猪 哼 哼 哼")
}
}
class AnimalFactory {
getAnimal(animal) {
switch(animal) {
case: "DOG":
return new Dog();
case "CAT":
return new Cat();
case "PIG":
return new Pig();
default:
return null;
}
}
}
现在我们创建了动物工厂,世界上只有动物会导致生态不平衡,所以我们创建人类工厂,吃一些猪emmm…….
class Student {
eat() {
console.log("学生吃东西")
}
}
class Teacher {
eat() {
console.log("老师吃东西")
}
}
class Developer {
eat() {
console.log("程序员吃东西")
}
}
看过工厂模式的我们知道,我们还可以创建一个工厂来管理
class PersionFactory {
getPersion(job) {
switch(job) {
case "STUDENT":
return new Student();
case "TEACHER":
return new Teacher();
case "DEVELOPER":
return new Developer();
default:
return null;
}
}
}
人类工厂有了,但是以后工厂会越来越多,这时候就得想个办法去管理,还是走之前的套路,在工厂之上在创建一个工厂,通过工厂抽象工厂
class FactoryProducer {
static getFactory(factory) {
switch(factory) {
case "ANIMAL":
return new AnimalFactory();
case "PERSION":
return new PersionFactory();
default:
return null
}
}
}
这时我们就可以通过工厂拿到抽象工厂了
const Persion = FactoryProducer.getFactory("PERSION")
const teacher = Persion.getPersion("TEACHER")
teacher.run()
const Animal = FactoryProducer.getFactory("ANIMAL")
const pig = Animal.getAnimal("pig")
pig.call()