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来创建对象