前面理解了工厂模式,抽象工厂模式建立在工厂模式之上,简单的来讲就是当有很多工厂时候,对工厂进行统一管理

    先把之前的工厂拿过来

    1. class Dog {
    2. call() {
    3. console.log("小狗 汪 汪 汪")
    4. }
    5. }
    6. class Cat {
    7. call() {
    8. console.log("小猫 喵 喵 喵")
    9. }
    10. }
    11. class Pig {
    12. call() {
    13. console.log("小猪 哼 哼 哼")
    14. }
    15. }
    16. class AnimalFactory {
    17. getAnimal(animal) {
    18. switch(animal) {
    19. case: "DOG":
    20. return new Dog();
    21. case "CAT":
    22. return new Cat();
    23. case "PIG":
    24. return new Pig();
    25. default:
    26. return null;
    27. }
    28. }
    29. }

    现在我们创建了动物工厂,世界上只有动物会导致生态不平衡,所以我们创建人类工厂,吃一些猪emmm…….

    1. class Student {
    2. eat() {
    3. console.log("学生吃东西")
    4. }
    5. }
    6. class Teacher {
    7. eat() {
    8. console.log("老师吃东西")
    9. }
    10. }
    11. class Developer {
    12. eat() {
    13. console.log("程序员吃东西")
    14. }
    15. }

    看过工厂模式的我们知道,我们还可以创建一个工厂来管理

    1. class PersionFactory {
    2. getPersion(job) {
    3. switch(job) {
    4. case "STUDENT":
    5. return new Student();
    6. case "TEACHER":
    7. return new Teacher();
    8. case "DEVELOPER":
    9. return new Developer();
    10. default:
    11. return null;
    12. }
    13. }
    14. }

    人类工厂有了,但是以后工厂会越来越多,这时候就得想个办法去管理,还是走之前的套路,在工厂之上在创建一个工厂,通过工厂抽象工厂

    1. class FactoryProducer {
    2. static getFactory(factory) {
    3. switch(factory) {
    4. case "ANIMAL":
    5. return new AnimalFactory();
    6. case "PERSION":
    7. return new PersionFactory();
    8. default:
    9. return null
    10. }
    11. }
    12. }

    这时我们就可以通过工厂拿到抽象工厂了

    1. const Persion = FactoryProducer.getFactory("PERSION")
    2. const teacher = Persion.getPersion("TEACHER")
    3. teacher.run()
    4. const Animal = FactoryProducer.getFactory("ANIMAL")
    5. const pig = Animal.getAnimal("pig")
    6. pig.call()