简单工厂模式的基础上进行的改进。它将产品的实例化过程从工厂类中抽离出来,交由具体的子类来实现,达到了更加灵活和可扩展的效果。
// 将原本的工厂类抽象乎或者做成接口
abstract class Factory {
// 由子类实现具体的产品创建
abstract Product getProduct();
}
// 子类来实现生产不同的产品
class ConcreteFactoryA extends Factory {
@Override
public Product getProduct() {
return new ProductA();
}
}
// 子类来实现生产不同的产品
class ConcreteFactoryB extends Factory {
@Override
public Product getProduct() {
return new ProductB();
}
}
核心点:将产品的实例化逻辑从工厂类中抽象出来,由具体的子类来实现。
优点:新产品的添加变得更加灵活,扩展性更强。引入新产品时,只需要创建新的具体工厂类,而不需要修改原有的代码。