抽象工厂
抽象工厂将工厂方法也抽象化,不同的工厂方法实现统一的工厂的接口,创造同一种,不同类型的产品。相当于是多个 工厂模式的组合。
举例
有产品接口 interface Car
,定义 drive ()
方法:
public interface Car {
void drive();
}
工厂接口 interface CarFactory
,定义生产车的方法:
public interface CarFactory {
Car produceCar();
}
两个工厂实例继承工厂接口,分别生产油车和电车,油车和电车分别实现 car
接口:
public class OilCarFactory implements CarFactory {
@Override
public Car produceCar() {
return new OilCar();
}
}
public class ElectricCarFactory implements CarFactory {
@Override
public Car produceCar() {
return new ElectricCar();
}
}
使用:
public class Application {
private Car car;
public Application(CarFactory factory) {
car = factory.produceCar();
}
}
可以根据传入参数或配置文件的配置项,创建不同的工厂,生产不同的产品。
适用场景
抽象工厂模式适合于生产二维维度的产品,例如生产汽车有品牌和油电两个维度,Lotus 和 Mustang 两个牌子下分别有油车和电车,就适合使用抽象工厂模式。