1. 抽象工厂模式

1.1 介绍

抽象工厂在工厂方法的基础上进一步扩展了工厂的功能,此时工厂不仅仅能够生产一种产品,而是可以生产多种。

1.2 优缺点

优点

  • 当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

缺点

  • 产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。

1.3 使用场景

1.4 注意事项

2. 案例实现

abstract class Car {
    abstract String getName();
}
class AudiCar extends Car {

    @Override
    String getName() {
        return "奥迪";
    }
}
class BMWCar extends Car {

    @Override
    String getName() {
        return "宝马";
    }
}

abstract class CarMat {
    abstract String getName();
}
public class AudiCarMat extends CarMat {
    @Override
    String getName() {
        return "奥迪车垫";
    }
}
public class BMWCarMat extends CarMat {
    @Override
    String getName() {
        return "宝马车垫";
    }
}

abstract class CarFactory {
    abstract Car getCar();
    abstract CarMat getCarMat();
}
public class AudiFactory extends CarFactory {

    @Override
    Car getCar() {
        return new AudiCar();
    }

    @Override
    CarMat getCarMat() {
        return new AudiCarMat();
    }
}
public class BMWFactory extends CarFactory {
    @Override
    Car getCar() {
        return new BMWCar();
    }

    @Override
    CarMat getCarMat() {
        return new BMWCarMat();
    }
}

/**
 * 抽象工厂模式
 * 继承抽象工厂来实现产品工厂,一个工厂可以生产多种产品
 *
 *@Author cly
 *@Date 2021/08/31 0:39
 *@Version 1.0
 */
public class FactoryMethod {
    public static void main(String[] args) {
        BMWFactory bmwFactory = new BMWFactory();
        System.out.println(bmwFactory.getCar().getName());
        System.out.println(bmwFactory.getCarMat().getName());
    }
}

3. 源码实现

3.1 Spring使用工厂模式创建Bean

通过BeanFactory和ApplicationContext来创建对象