- -适用场景:
- 客户只知道创建产品的工厂名,而不知道具体的产品名。如 TCL 电视工厂、海信电视工厂等。
- 创建对象的任务由多个具体子工厂中的某一个完成,而抽象工厂只提供创建产品的接口。
- 客户不关心创建产品的细节,只关心产品的品牌。
对原来代码的改动少了,通过创建新的工厂来实现
Spring 框架使用工厂模式来实现 Spring 容器的 BeanFactory 和 ApplicationContext 接口。Spring 容器基于工厂模式为 Spring 应用程序创建 bean,并管理着每一个 bean 的生命周期。BeanFactory 和 ApplicationContext 是工厂接口,并且在 Spring 中存在有很多实现类。getBean() 方法是相对应的 bean 的工厂方法。
Car.Interface, Aodi.class, Byd.class与简单工厂模式中的一样。
- CarFactory.Interface
public interface CarFactory {
Car createCar();
}
- AodiFactory.class
public class AodiFactory implements CarFactory {
@Override
public Car createCar() {
return new Aodi();
}
}
- BydFactory.class
public class BydFactory implements CarFactory {
@Override
public Car createCar() {
return new Byd();
}
}
- 调用
public class Client {
//注意这里是上转型对象
public static void main(String[] args) {
Car c1 = new AodiFactory().createCar();
Car c2 = new BydFactory().createCar();
c1.run();
c2.run();
}
}
往后添加新车,先添加新的工厂,再添加新车,实现对源代码的改动小,但是类会变多。