抽象工厂

抽象工厂将工厂方法也抽象化,不同的工厂方法实现统一的工厂的接口,创造同一种,不同类型的产品。相当于是多个 工厂模式的组合。

举例

有产品接口 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 两个牌子下分别有油车和电车,就适合使用抽象工厂模式。